面试题

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

1、思路:通过遍历找到s2中对于s1首字符的位置 j。然后从i, j开始依次比较,如果全部相等,则返回true,否则返回false

class Solution {
public:
    bool isFlipedString(string s1, string s2) {
        if (s1.size() != s2.size()) { return false; }
        if (s1 == "" && s2 == "") { return true; }
        int i = 0, j = 0, js = 0, cnt = 0;
        while (js < s2.size()) {
            while(s1[i] == s2[j] && cnt < s2.size()) {
                i++;
                j = (j + 1) % s2.size();
                cnt++;
            }
            if (cnt == s2.size()) {
                return true;
            }
            cnt = 0;
            js += 1;
            j = js;
            i = 0;
        }
        return false;
    }
};

  2、优秀解法:若两个字符串可以轮转得到,则s2肯定在s1 + s1的子集内

class Solution {
public:
    bool isFlipedString(string s1, string s2) {
        return s1.size() == s2.size() && (s1+s1).find(s2) != -1;
    }
};

  

 

posted on 2021-03-17 20:30  qiwa-hk  阅读(99)  评论(0)    收藏  举报