//判断两个字符串是否互为旋转词
public class IsRotate{
//互为旋转词
public static boolean isRotate(String str1,String str2)
{
if(str1==null||str2==null||str1.length()!=str2.length())
{
return false;
}
String str=str2+str2;
return getIndexOf(str,str1)!=-1; //寻找str串中是否有a子串
}
//寻找s串中m子串所在的索引(KMP算法)
public static int getIndexOf(String s,String m)
{
if(s.length()<m.length())
{
return -1;
}
char[]ss=s.toCharArray();
char[]ms=m.toCharArray();
int si=0;
int mi=0;
//获得模式串next的函数
int[]next=getNextArray(ms);
while(si<ss.length&&mi<ms.length)
{
if(ss[si]==ms[mi])
{
si++;
mi++;
}else if(next[mi]==-1)
{
si++;
}else{
mi=next[mi];
}
}
return mi==ms.length?si-mi:-1;
}
//模式串的next函数
public static int[]getNextArray(char[]ms)
{
if(ms.length==1)
{
return new int[]{-1};
}
//返回的next数组
int[]next=new int[ms.length];
next[0]=-1;//第一个位置
next[1]=0; //弟二个位置
int pos=2;
int cn=0;
while(pos<next.length)
{
if(ms[pos-1]==ms[0])
{
next[pos++]=++cn;
}else if(cn>0)
{
cn=next[cn];
}else{
next[pos++]=0;
}
}
return next;
}
public static void main(String[]args)
{
String str1="ZUOCHAO";
String str2="CHAOZUO";
System.out.println(isRotate(str1,str2));
}
}
判断两个字符串是否互为旋转词
最新推荐文章于 2021-12-10 20:19:58 发布