问题描述:这是《编程之美》里的一个问题。
解题方法:旋转词是指字符串A可以通过字符串B循环移位的得到就称A是B的旋转词;判断A是否是B的旋转词有一个规律:将字符串A与自身链接起来也就是将两个A链接起来。如果连个A链接起来的结果包含B,则A是B的旋转词。旋转词是相互的,A是B的旋转词,那么B肯定也是A的旋转词,所以用两个B链接起来判断是否包含于A也是可以的。互为旋转词的两个字符串长度肯定是相等的。
回到本题的问题上,对于A是否是B旋转词的子串也可以用类似的方法规律,即将两个B链接起来,如果链接后的结果包含于A(也就是说A是链接后字符串的一个子串),则A就是B旋转词的一个子串。
代码如下:
import java.util.*;
public class 旋转词 {
public static void main(String[] args){
String str1 = "abcdfeg";
String str2 = "ega";
System.out.println(isRotate(str1, str2));
}
private static boolean isRotate(String b, String a) {
StringBuilder sb = new StringBuilder(b);
sb.append(b);
return sb.toString().contains(a);
}
}