思路
暴力模拟
迭代字符串s2
中每个下标,作为字符串的起始位置,并判断是否等于s1
。
代码如下:
class Solution {
public boolean isFlipedString(String s1, String s2) {
if(s1.length() != s2.length()){
return false;
}
int n = s1.length();
int i=0, j=0;
while(i < n){
if(j == n){
//s2的每一个下标作为起始点都已经尝试过了,仍不能得到两个相同的字符串
//直接返回false;
return false;
}
i=0;
for (int k = j; k < j + n; k++) {
if (s1.charAt(i) == s2.charAt(k % n)){
i++;
} else {
j++; //从下一位作为开头
break;
}
}
}
return true;
}
}
子字符串搜索
观察s2
,由于是s1
的翻转,因此会有s2+s2
中存在一个子字符串为s1
,直接判断即可。
可以利用KMP算法判断,也可直接利用字符串工具函数
KMP算法可见:【宫水三叶】简单题学 KMP 算法
class Solution {
public boolean isFlipedString(String s1, String s2) {
if(s1.length() != s2.length()){
return false;
}
return (s1+s1).contains(s2);
}
}