算法提高 周期字串
        【摘要】   
 
   
  
    问题描述   右右喜欢听故事,但是右右的妈妈总是讲一些“从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢?从前有座山……”这样循环的故事来搪塞右右。    我们定义,如果一个字符串是以一个或者一个以上的长度为k的重复字符串所连接成的,那么这个字符串就叫做周期为k的串。    例如:    字符串’abcabcabcabc’周期为3...
    
    
    
    
     问题描述 
   
 
   
     右右喜欢听故事,但是右右的妈妈总是讲一些“从前有座山,山里有座庙,庙里有个老和尚给小和尚讲故事,讲的什么呢?从前有座山……”这样循环的故事来搪塞右右。 
    
我们定义,如果一个字符串是以一个或者一个以上的长度为k的重复字符串所连接成的,那么这个字符串就叫做周期为k的串。
例如:
字符串’abcabcabcabc’周期为3,因为它是由4个循环’abc’组成的。它同样是以6为周期(两个重复的’abcabc’)和以12为周期(一个循环’abcabcabcabc’)。
右右现在想给他的朋友大灰狼转述妈妈讲的故事,请帮他写一个程序,可以测定一个字符串的最小周期。
 
   我们定义,如果一个字符串是以一个或者一个以上的长度为k的重复字符串所连接成的,那么这个字符串就叫做周期为k的串。
例如:
字符串’abcabcabcabc’周期为3,因为它是由4个循环’abc’组成的。它同样是以6为周期(两个重复的’abcabc’)和以12为周期(一个循环’abcabcabcabc’)。
右右现在想给他的朋友大灰狼转述妈妈讲的故事,请帮他写一个程序,可以测定一个字符串的最小周期。
     输入格式 
   
 
   
     一个最大长度为100的无空格的字符串。 
   
 
   
     输出格式 
   
 
   
     一个整数,表示输入的字符串的最小周期。 
   
 
   
     样例输入 
   
 
   
     HaHaHa 
   
 
   
     样例输出 
   
 
   
     2 
   
 
   
     样例输入 
   
 
   
     Return0 
   
 
   
     样例输出 
   
 
   
     7 
   
 
   
       
        - 
         
          
         
         
          
           import java.util.Scanner;
          
         
 
        - 
         
          
         
         
           
          
         
 
        - 
         
          
         
         
          
           public class Main{ 
          
         
 
        - 
         
          
         
         
           publicstatic void main(String[] args) {  
          
         
 
        - 
         
          
         
         
          
            Scanner sc = newScanner(System.in);  
          
         
 
        - 
         
          
         
         
          
            String s = sc.nextLine(); 
          
         
 
        - 
         
          
         
         
           
          
         
 
        - 
         
          
         
         
           int len = s.length(); 
          
         
 
        - 
         
          
         
         
          
            booleanfind=true; 
          
         
 
        - 
         
          
         
         
           for(int k=1; k
          
         
 
        - 
         
          
         
         
           if(len%k == 0){  
          
         
 
        - 
         
          
         
         
           //k能被len整除,k有可能是要找的 
          
         
 
        - 
         
          
         
         
           for(int i=k; i
          
         
 
        - 
         
          
         
         
           if(s.charAt(i) ==s.charAt(i%k)){  
          
         
 
        - 
         
          
         
         
          
            find = true; //继续循环 
          
         
 
        - 
         
          
         
         
          
            }else{ 
          
         
 
        - 
         
          
         
         
           //k不是我们要找的 
          
         
 
        - 
         
          
         
         
          
            find = false;  
          
         
 
        - 
         
          
         
         
           break;  
          
         
 
        - 
         
          
         
         
          
            } 
          
         
 
        - 
         
          
         
         
          
            } 
          
         
 
        - 
         
          
         
         
           if(find){ 
          
         
 
        - 
         
          
         
         
           //终于找到了 
          
         
 
        - 
         
          
         
         
          
            System.out.println(k); 
          
         
 
        - 
         
          
         
         
           break; 
          
         
 
        - 
         
          
         
         
          
            }
          
         
 
        - 
         
          
         
         
          
            }
          
         
 
        - 
         
          
         
         
          
            }  
          
         
 
        - 
         
          
         
         
           if(!find){
          
         
 
        - 
         
          
         
         
          
            System.out.println(len);
          
         
 
        - 
         
          
         
         
          
            }
          
         
 
        - 
         
          
         
         
          
            } 
          
         
 
        - 
         
          
         
         
          
           } 
          
         
 
       
       
     
      注:此题小编只得到了90分,修改多次也未测试通过,,有什么改进方案,还请各位大神评论,私信,,, 
    
 
   文章来源: czhenya.blog.csdn.net,作者:陈言必行,版权归原作者所有,如需转载,请联系作者。
原文链接:czhenya.blog.csdn.net/article/details/76092108
        【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
            cloudbbs@huaweicloud.com
        
        
        
        
        - 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)