【LeetCode】字符串轮转 Java 初学者题解
题目描述
字符串轮转。给定两个字符串 s1 和 s2,请编写代码检查 s2 是否为 s1 旋转而成(比如,waterbottle 是 erbottlewat 旋转后的字符串)。
复制代码
思路分析
今天的算法题目是判断两个字符串 s1 和 s2, s2 是否为 s1 旋转而成。这里旋转的意思是,将字符串 s1 的每一个字符从前到后逐个移动到末尾形成新的字符串。
比较字符串 s2 是否为 s1 旋转而成。首先需要比较的 s1, s2 字符串的长度,当他们的长度不相同的时候,必然是 false。
当 s1, s2 字符串的长度相同的时候。怎么完成 s1 的旋转呢? 直接把 s1 的字符逐个移动到尾部实现起来比较复杂!这里有一个小技巧,我们可以把两个 s1 拼接起来形成 s3, 然后使用 substring() 函数,就可以直接完成旋转的需求。
完成了 s1 的旋转,接下来需要和 s2 比较是否相同。我们直接使用 equals() 方法即可, 初学的朋友不要使用 == 比较。 equals() 比较是对象的内容是否相同。== 对于基本的数据类型,比较的是值是否相同。对于对象,比较的是地址是否相同。
具体实现代码如下,供参考。
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n), 空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【Albert】的原创文章。
原文链接:【http://xie.infoq.cn/article/6eea4429962fd2d4ed2ad3228】。文章转载请联系作者。
评论