算法笔记-旋转词

概念:

如果一个字符串str,把字符串str前面任意的部分挪到后面去形成的字符串叫做str旋转词,比如str=“1234”,str的旋转词有“1234”、“2341”、“3412”、“4123”。

求解姿势:

  1. 判断str1与str2是否长度相等;
  2. 如果长度相等,生成str1+str1的字符串;
  3. 用KMP算法判断新的字符串str1中是否含有str2。

例题:

如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。对于两个字符串AB,请判断A和B是否互为旋转词。给定两个字符串A和B及他们的长度lenalenb,请返回一个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
点赞