//解法只是根据个人理解,难免有出错,不喜勿喷!
题目:
[问题描述] 如果字符串t是字符串s的后面若千个字符循环右移得到的.称s和t是旋转词,
例如"abedef"和"efabed"是旋转词,而"abedef"和"feabcd"旋转词。
输人描述:第1行为n(1≤n≤100),接下来的n行,每行两个字符串,以空格分隔。
输出描述:输出n行,若输人的两个字符串是旋转词,输出"Yes",否则输出"No"。
输人样例:
2
abedef efabed
abedef feabed
样例输出:
Yes
No
思路:
import java.util.Scanner;
public class RotationWord {
static int rotation(String s1, String s2) {
int temp = 0; //是否为旋转词,默认为否(0)
int len = s1.length(); //s1和s2的字符串长度相等
int i, j; //从第一个字符开始比较
for(i=0; i<2*len; i++) { //以循环序列的方式比较
for(j=0; j<2*len; j++) {
if(s1.charAt( (i+len)%len ) == s2.charAt( (j+len)%len) ) {//循环比较
break;
}
}
if(s2.charAt( (j+len+1)%len) == s1.charAt( (i+len+1)%len) ) //比较当前相等元素的下一个是否也相等
temp = 1;
else
temp = 0;
/*System.out.println(i+" "+j);
System.out.println(s1.charAt( (i+len+1)%len ) +" "+s2.charAt( (j+len+1)%len ));
System.out.println(temp);*/
if(temp == 0) { //如果发现当前元素的下一个不想等则跳出(此时已经可以证明不是旋转词)
break;
}
}
return temp;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
String[] s = new String[100];
String[] t = new String[100]; //1=<n<=100
for(int i=0; i<n; i++) {
s[i] = input.next();
t[i] = input.next();
}
for(int i=0; i<n; i++) {
if(rotation(s[i], t[i]) == 1)//调用旋转函数
System.out.println("Yes");
else
System.out.println("No");
}
}
/*abcdef efabcd
abcdef feabcd*/
}