面试题
字符串轮转。给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)
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;
}
};
浙公网安备 33010602011771号