LeetCode每日一题- day5
新手入坑LeetCode,每天打卡一道题
算法不一定很好,只是我自己的一个水平体现,做个自己刷题的记录,欢迎交流学习
(尽量AC LeetCode官方的每日一题)
题目:面试题 01.09. 字符串轮转
字符串轮转。给定两个字符串
s1
和s2
,请编写代码检查s2
是否为s1
旋转而成(比如,waterbottle
是erbottlewat
旋转后的字符串)。
思路:
思路最简单的就是把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;
}
};