给定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; } }