一、题目描述
假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。
给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。
测试样例:
"Hello world","worldhello "
返回:false
"waterbottle","erbottlewat"
返回:true
二、结题思路
个人思路是将字符串s1前i个元素移动到s1的尾部,然后判断新字符串和s2是否相等,如果相等,则返回true;如果一直找不到则返回false。
牛客论坛里面有一种更好的做法,如果s2是s1的反转字符串,那么s2必然是两个s1拼接成的新字符串的字串,想法真的很棒。
三、代码
public class ReverseEqual {
public boolean checkReverseEqual(String s1, String s2) {
// write code here
if(s1==null || s2==null || s1.length()!=s2.length())
return false;
String s=s1+s1;
if(s.indexOf(s2)<0)
return false;
return true;
/*
if(s1==null || s2==null || s1.length()!=s2.length())
return false;
for(int i=1;i<s1.length();i++){
StringBuilder sb=new StringBuilder();
sb.append(s1.substring(i,s1.length()));
sb.append(s1.substring(0,i));
if(s2.equals(sb.toString()))
return true;
}
return false;
*/
}
}