字符串问题——判断两个字符串是否互为旋转词

题目:对于一个字符串str,把前面任意部分挪到后面形成的字符串叫作str的旋转词。比如str=”12345”,其旋转词有”23451”、”34512”、”45123”、”51234”。给定两个字符串a和b,判断a和b是否互为旋转词。

实现
1.如果a、b长度不同,则返回false.
2.对于长度相同的a和b,生成String b2 = b + b,即b2是两个b拼在一起的结果,如果b2中包含a,则说明b是a的旋转词。比如a=”cdab”,b=”abcd”,则b2=”abcdabcd”,可见b2[0,..3]=”abcd”,b2[1,..4]=”bcda”,…b2[I,…i+3]都是b的旋转词。由此可见,如果一个字符串b的长度为N,则b2的任意长度为N的子串都是b的旋转词,并且b2包含b的所有旋转词。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class IsRotation {
public static boolean isRotation(String a, String b) {
if (a == null | b == null || a.length() == 0 || b.length() == 0) {
return false;
}
String b2 = b + b;
if (b2.contains(a)) {
return true;
}
return false;
}
//Test
public static void main(String[] args) {
String a = "12345";
String b = "23451";
String c = "14325";
System.out.println(isRotation(a, b));
System.out.println(isRotation(a, c));
}
}