给定2个字符串s1和s2,请判断s2是否为s1旋转而成,返回bool值。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。
测试样例:
"Hello world","worldhello "
返回:false
"waterbottle","erbottlewat"
返回:true
//根据置顶的那位同学的思路写的
import java.util.*;
public class ReverseEqual {
public boolean checkReverseEqual(String s1, String s2) {
// write code here
if(s1.length()==0||s2.length()==0||s1.length()!=s2.length()){
return false;
}
String tem=s1+s1;
if(tem.contains(s2)){
return true;
}
return false;
}
}
看了评论才知道题目意思,对不起语文老师,话说我是来找茬的,我把它当初前面一题,两个字符串异序同构做的,竟然AC了,这测试用例,已提交纠错了,不过话说我已纠错了不下好几题了,至今没有得到反馈啊,不知道是不是我太菜,大神没空搭理我,让我哭会,
//能AC的错误代码
public boolean checkReverseEqual(String s1, String s2) {
if(s1==null||s2==null) return false;
if(s1.length()!=s2.length()) return false;
int[] hash1=new int[256];
int[] hash2=new int[256];
for(int i=0;i<s1.length();i++){
hash1[s1.charAt(i)]++;
hash2[s2.charAt(i)]++;
}
for(int j=0;j<hash1.length;j++) if(hash1[j]!=hash2[j]) return false;
return true;
}
//正确代码 方法一
public boolean checkReverseEqual(String s1, String s2) {
if(s1==null||s2==null) return false;
if(s1.length()!=s2.length()) return false;
s1=s1+s1;
return s1.indexOf(s2)==-1?false:true;
}
//同上,方法二 自己写匹配部分
public boolean checkReverseEqual(String s1, String s2) {
if(s1==null||s2==null) return false;
if(s1.length()!=s2.length()) return false;
s1+=s1;
int count=0;
for(int i=0;i<s1.length()&&count<s2.length();i++){
if(s2.charAt(count)==s1.charAt(i)) count++;
else count=0;
}
return count==s2.length()?true:false;
}
import java.util.*;
//本来想用kmp匹配的,但是太难了,写不出来
public class ReverseEqual {
public boolean checkReverseEqual(String s1, String s2) {
if(s1.length()!=s2.length())
return false;
String str=s1+s1;
if(str.contains(s2))
return true;
return false;
}
}
}
class ReverseEqual {
public:
bool checkReverseEqual(string s1, string s2) {
if(s1.size() != s2.size()) return false;
int siz = s1.size();
for(int i = 0; i < siz; i++){
if(s1[0] == s2[i]){
int pos1 = 0, pos2 = i, count = 0;
while(pos1 < siz && s1[pos1] == s2[pos2]){
count++;
pos1++;
if(pos2 == siz -1) pos2 = 0;
else pos2++;
}
if(count == siz) return true;
}
}
return false;
}
};
public static boolean check(String s1, String s2) {
// write code here
char[]ca=s1.toCharArray();
char[]cb=s2.toCharArray();
Arrays.sort(ca);
Arrays.sort(cb);
return Arrays.equals(ca,cb);
}
import java.util.*;
public class ReverseEqual {
public boolean checkReverseEqual(String s1, String s2) {
if (s1.length() != s2.length())
return false;
if (s1.equals(s2))
return true;
int len = s1.length();
int offset = 1;
int j = 0;
while (offset < len) {
while (offset < len && !s1.substring(0, offset).equals(
s2.substring(len - offset))){
offset++;
}
if (offset < len
&& s1.substring(offset)
.equals(s2.substring(0, len-offset))) {
return true;
}
offset++;
}
return false;
}
}
package june.code.byhehe.book.GoldBook;
public class CM8ReverseSubStr {
public static void main(String[] args) {
String s1 = "waterbottle";
String s2 = "erbottlewat";
CM8 cm8 = new CM8();
System.out.println(cm8.checkReverseEqual(s1, s2));
System.out.println(cm8.checkReverseEqual2(s1, s2));
}
}
class CM8{
// 方法 s = s1+s1 ,判断 s1是否包含s2
public boolean checkReverseEqual(String s1, String s2) {
// write code here
// 首先判断长度
if(s1.length()!=s2.length())
return false;
String s = s1+s1;
// 使用 子串 判断
int length = s2.length();
for (int i = 0; i < s.length() - length; i++) {
// System.out.println(s.substring(i,i+length)+" "+s2);
if(s.substring(i, i+length).equals(s2))
return true;
}
return false;
}
public boolean checkReverseEqual2(String s1, String s2) {
// write code here
// 首先判断长度
if(s1.length()!=s2.length())
return false;
s2 = "^.*"+s2+".*$";
String s = s1+s1;
// 使用 子串 判断
int length = s2.length();
if(s.matches(s2)){
// System.out.println("匹配");
return true;
}
return false;
}
}
class ReverseEqual {
public:
bool checkReverseEqual(string s1, string s2) {
// write code here
if(s1.size() != s2.size()) return false;
int n = s1.size();
int s = 0, l = n - s;
while (n - l <= n){
if(s1 == s2.substr(s,l) + s2.substr(0,n-l))
return true;
s ++;
l = n - s;
}
return false;
}
};
//我的low解法 import java.util.*;
public class ReverseEqual {
public boolean checkReverseEqual(String s1, String s2) { StringBuilder builder = null;
int length = s1.length();
boolean flag = false;
for(int i=1;i<length;i++){
builder = new StringBuilder();
builder.append(s1.substring(i,length)).append(s1.substring(0,i));
if(builder.toString().equals(s2)){
flag = true;
break;
}
}
return flag;
}
}