对字符串的旋转操作描述如下:
例如: 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)