写点什么

【LeetCode】字符串轮转 Java 初学者题解

作者:Albert
  • 2022-11-09
    北京
  • 本文字数:865 字

    阅读完需:约 3 分钟

题目描述

字符串轮转。给定两个字符串 s1 和 s2,请编写代码检查 s2 是否为 s1 旋转而成(比如,waterbottle 是 erbottlewat 旋转后的字符串)。


示例1:
输入:s1 = "waterbottle", s2 = "erbottlewat" 输出:True示例2:
输入:s1 = "aa", s2 = "aba" 输出:False
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/string-rotation-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法题目是判断两个字符串 s1 和 s2, s2 是否为 s1 旋转而成。这里旋转的意思是,将字符串 s1 的每一个字符从前到后逐个移动到末尾形成新的字符串。

  • 比较字符串 s2 是否为 s1 旋转而成。首先需要比较的 s1, s2 字符串的长度,当他们的长度不相同的时候,必然是 false。

  • 当 s1, s2 字符串的长度相同的时候。怎么完成 s1 的旋转呢? 直接把 s1 的字符逐个移动到尾部实现起来比较复杂!这里有一个小技巧,我们可以把两个 s1 拼接起来形成 s3, 然后使用 substring() 函数,就可以直接完成旋转的需求。

  • 完成了 s1 的旋转,接下来需要和 s2 比较是否相同。我们直接使用 equals() 方法即可, 初学的朋友不要使用 == 比较。 equals() 比较是对象的内容是否相同。== 对于基本的数据类型,比较的是值是否相同。对于对象,比较的是地址是否相同。

  • 具体实现代码如下,供参考。

通过代码

class Solution {    public boolean isFlipedString(String s1, String s2) {        boolean ans = false;        if (s1.length() != s2.length()) {            return ans;        }        if (s2.equals(s1)) {            ans = true;            return ans;        }        int n = s1.length();        String s3 = s1 + s1;        for (int i = 0; i < n; i++) {            String temp = s3.substring(i, i + n);            if (s2.equals(temp)) {                ans = true;                return true;            }        }
return ans; }}
复制代码

总结

  • 上述算法的时间复杂度是 O(n), 空间复杂度是 O(n)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 2
用户头像

Albert

关注

数据结构和算法爱好者 2019-09-29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】字符串轮转Java初学者题解_算法_Albert_InfoQ写作社区