对字符串的旋转操作描述如下:
例如: str = "123456"
str的所有旋转词为:"123456","234561","345612","456123","561234","612345"。
给定两个字符串str1和str2,实现判断str1是否是str2的旋转词。
private static bool IsReverse(string ori, string now) { char[] oriArray = ori.ToCharArray(); char[] nowArray = now.ToCharArray(); int length = ori.Length; if (length != now.Length) { return false; } int j = 0; int i = 0; for (i = 0, j = 0; j < length; ++i) { if (nowArray[0] == oriArray[i]) // 找到现在数组的第一个数对应原数组的下标 { break; } } if (i == length) return false; char[] newArray = new char[length]; for (j = 0; j < length; j++) // 把原数组排序赋值给新数组 { newArray[j] = ori[i]; ++i; if (i == length) i = 0; } for (i = 0; i < length; i++) // 把新数组和nowArray比较 { if (newArray[i] != nowArray[i]) { return false; } } return true; }
public class Rotate { static boolean isRotation(String str1, String str2){ if(str1==null||str2==null|| str1.length()!=str2.length()) return false; //拆分字符串str2 char[] arrChar=new char[str2.length()]; for(int i=0;i<str2.length();i++){ arrChar[i]=str2.charAt(i); } //返回翻转校验结果 return rotating(arrChar, str1, str2); } static boolean rotating(char[] arrChar, String str1,String str2){ //保留单词首字母 char temp=arrChar[0]; //开始翻转,首字母放置尾部 for(int j=0;j<arrChar.length-1;j++){ arrChar[j]=arrChar[j+1]; } arrChar[str2.length()-1]=temp; //递归结束基值 if(String.valueOf(arrChar).equals(str2)) return false; //其中若果和str1相等就返回true if(String.valueOf(arrChar).equals(str1)) return true; //返回递归校验值 return rotating(arrChar,str1,str2); } public static void main(String[] ags){ //判断给定字符串是否是某字符串的 “旋转词” Scanner scan=new Scanner(System.in); System.out.println("请输入一个字符串:"); String str1 = scan.next(); String str2 = scan.next(); if(isRotation(str1, str2)) System.out.println(str1+"是"+str2+"的旋转词!"); else System.out.println(str1+"不是"+str2+"的旋转词!"); } }
nextArray.push_back(0);
public class Solution { /** * 判断str1是否是str2的旋转词 * 输入:字符串str1,字符串str2 * 返回:true代表str1是str2的旋转词;false代表不是 */ public boolean isRotation(String str1, String str2) { if(str1 == null || str2 == null) return false; if(str1.length() != str2.length()) return false; if(str1.equals("") && str2.equals("")) return true; int length=str1.length(); for(int i=0;i<length;i++) { if((str1.substring(i)+str1.substring(0, i)).equals(str2)) return true; } return false; } }
public class Solution { public int location(int length, char[] c1, char[] c2){ for (int i = 0; i < length; i++) { if (c2[i] == c1[0]) { return i; } } return -1; } public boolean isRotation(String str1, String str2) { if (str1.length() != str2.length()) { return false; } int length = str1.length(); char[] c1 = str1.toCharArray(); char[] c2 = str2.toCharArray(); int loc = location(length, c1, c2); if (loc == -1) { return false; } for (int i = 0; i < length; i++) { if (c1[i] != c2[(i+loc)%length]) { return false; } } return true; } }
答案错误"",""
输出应该为:
true
public class test{ public boolean IsSubset(String str1,String str2){ if(str1.length() != str2.length()) return false; String result = str1+str1; return result.contains(str2); } public static void main(String[] args){ boolean l = new test().IsSubset("123456","234561"); System.out.println("l = "+l); } }
private static boolean isReverse(String str1,String str2){ int length=str1.length(); for(int i=0;i<length;i++) { if((str1.substring(i, length)+str1.substring(0, i)).equals(str2)) return true; } return false; }用substring来实现。
#!/usr/bin/python27 # encoding=utf-8 #把字符串拆解成list,然后进行list排序,对比list def isReverse_a(str_a,str_b): if len(str_a)!=len(str_b): return False a = sorted(list(str_a)) b = sorted(list(str_b)) return a==b #字符串的ascii码相乘或者相加然后对比值 def isReverse_b(str_a,str_b): a= reduce(lambda x,y : x+y,[ord(i) for i in list(str_a)]) b= reduce(lambda x,y : x+y,[ord(i) for i in list(str_b)]) #print a ,b, a==b return a==b a = "2015,恭喜发财" b = "恭喜发财,2015" print isReverse_a(a,b) print isReverse_b(a,b)