//解法只是根据个人理解,难免有出错,不喜勿喷!

题目:

[问题描述]  如果字符串t是字符串s的后面若千个字符循环右移得到的.称s和t是旋转词,

例如"abedef"和"efabed"是旋转词,而"abedef"和"feabcd"旋转词。

输人描述:第1行为n(1≤n≤100),接下来的n行,每行两个字符串,以空格分隔。

输出描述:输出n行,若输人的两个字符串是旋转词,输出"Yes",否则输出"No"。

 

输人样例:

 

2

abedef efabed

abedef feabed

 

样例输出:

Yes

No

 

思路:

Java求解旋转词问题


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*/
}

 

相关文章: