给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。
s 的 旋转操作 就是将 s 最左边的字符移动到最右边。
例如, 若 s = 'abcde',在旋转一次之后结果就是'bcdea' 。
示例 1:
输入: s = "abcde", goal = "cdeab"
输出: true
示例 2:输入: s = "abcde", goal = "abced"
输出: false
题目来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/rotate-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法一:
只需比较一下两个字符串的长度,然后判断旋转前的字符串*2中是否存在旋转后的字符串就ok,因为字符串*2中已经包含了所有可能的移动情况。
代码:
public static boolean rotateString(String s, String goal) {
String str=s+s;
return s.length()==goal.length()&&str.contains(goal);
}
方法二:
当两个字符串长度不同时,必然不是旋转后的结果,返回false;长度一样时,假设s旋转i位,那么goal中的某个字符goal[j]必然和s[i+j%n]相对应,因此我们在i固定的情况下,遍历所有j,如果所有字符都对应,则返回true,否则,遍历其他的i;如果所有的i都不能使s变成goal,则返回false。
代码:
public static boolean rotateString(String s, String goal) {
int m=s.length(),n=goal.length();
if(m!=n) {
return false;
}
for(int i=0;i<n;i++) {
boolean result=true;
for(int j=0;j<n;j++) {
if(s.charAt((i+j)%n)!=goal.charAt(j)) {
result=false;
break;
}
}
if(result) {
return true;
}
}
return false;
}