【LeetCode】左旋转字符串 Java 题解
题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字 2,该函数将返回左旋转两位得到的结果"cdefgab"。
复制代码
思路分析
这是一道字符串相关的题目,题意容易理解。可以直接按照题意循环解决,也可以调用系统函数 substring() 解决。
AC 代码
复制代码
总结
循环方法的时间复杂度是 O(n), 空间复杂度是 O(1)
substring 系统函数的时间复杂度是 O(1), 空间复杂度是 O(1)
实际题目代码提交过程中,调用系统函数 substring() 的效果更好,下面就来看一下 substring()的实现。
substring() 函数分析
substring() 实现
复制代码
从上述实现分析,substring 对边界进行了完备分析,返回值是对象本身,或者创建一个新的对象返回。
new String(value, beginIndex, subLen) 实现
进一步分析 new String(value, beginIndex, subLen) 方法。
复制代码
观察代码,实际调用的 Arrays.copyOfRange(value, offset, offset+count);
Arrays.copyOfRange() 实现
复制代码
这里是直接调用 System 函数实现
复制代码
通过上述的代码分析,复习明确了 Java String Object 是不可变的。
坚持每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/bedaf9a23a83f1b1024ec864d】。文章转载请联系作者。
评论