LeetCode每日一题- day5

LeetCode每日一题- day5

新手入坑LeetCode,每天打卡一道题
算法不一定很好,只是我自己的一个水平体现,做个自己刷题的记录,欢迎交流学习
(尽量AC LeetCode官方的每日一题)

题目:面试题 01.09. 字符串轮转

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

思路:

思路最简单的就是把s2重新拼接一个s2,然后依次遍历对比s1,如果当前字符相同,进去下一个字符,如果不同,s2的进入下一个,s1的从头开始.
如果s1能遍历到最后,就代表有与s1相同的字符串.
复杂的:KMP(简单题,不至于,不如用C++的find()函数)

代码:

class Solution {
public:
    bool isFlipedString(string s1, string s2) {
        if(s1.size() != s2.size()) return 0;
        int n = s1.size();
        s2 += s2;//拼接两次字符串(即使旋转过一次,也会出现原字符串)
        int j = 0;//与原字符串(s1)的连续相同的位置(or 长度 - 1)
        for(int i = 0; i < 2 * n; i ++){//遍历s2
            if(s2[i] == s1[j]){//如果出现相同的字符情况
                j ++;//指向s1的位置进行对比
               if(j == n) return 1;//出现了完全和s1相同的字符串
            } 
            else j = 0;//有不同的就要从头重新比较
        }
        if(j == n) return 1;
        else return 0;
    }
};

猜你喜欢

转载自blog.csdn.net/Nmj_World/article/details/127110357