概念:
如果一个字符串str,把字符串str前面任意的部分挪到后面去形成的字符串叫做str旋转词,比如str=“1234”,str的旋转词有“1234”、“2341”、“3412”、“4123”。
求解姿势:
- 判断str1与str2是否长度相等;
- 如果长度相等,生成str1+str1的字符串;
- 用KMP算法判断新的字符串str1中是否含有str2。
例题:
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。
测试样例:
"cdab",4,"abcd",4
返回:true
Java实现代码:
public static boolean chkRotation(String A, int lena, String B, int lenb) {
if(lena!=lenb){
return false;
}else{
A = A+A;
int len = lena+lenb;
for(int i = 0 ; i < len-lena;i++){
if(A.substring(i, lena+i).equals(B)){
return true;
}
}
return false;
}
}
public static void main(String[] args){
System.out.println(chkRotation("RFSPUYLYR",9,"UYLYRRFSP",9));
}
运行结果:true