题目:
如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=“12345”,A的旋转词有"12345",“23451”,“34512”,“45123"和"51234”。对于两个字符串A和B,请判断A和B是否互为旋转词。
给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。
思路:
首先先看A和B的长度是否相同,若不同则直接排除。
我们将两个A拼接到一起,那么B如果是A的旋转词,那么B一定是AA的子串。
所以这时候只要用KMP算法,看B是否是AA的子串即可得出答案。
代码:
package Servlet;
public class Rotating_word {
public static void main(String[] args) {
String a = "12345";
String b = "34512";
if(rotating_word(a,b)){
System.out.println("是旋转词");
}else {
System.out.println("不是旋转词");
}
}
public static boolean rotating_word (String str1,String str2){
if(str1.length()!=str2.length()){
return false;
}
String s = str1+str1;
int a = KMP.KmpMatch(s,str2);//此处用kmp算法判断是否匹配,如果是则返回-1,如果不是则返回其他值
if(a==-1){
return false;
}else {
return true;
}
}
}
kmp算法传送门:2.算法入门从零开始必看——KMP算法_非又肝的博客-CSDN博客