本文共 1077 字,大约阅读时间需要 3 分钟。
思路如下:
其实这道题我一开始是用枚举的方法,结果超时。
下面的代码是这样的,要明白一点:周期必须是字符串长度的因数(除了1之外)。而且当判断的周期k 大于 字符串长度的一半,则不必要继续判断了(因为大于字符串的长度一半>周期k),如果再判断下去,周期也不会变,自己想一下对不对。。oh,最重要的来了,而且很多人应该会对代码:s.charAt(i)!=s.charAt(i%k)有疑问,这行代码是经典,这个你想一下,左边为实际的字符,右边为字符串的第一个周期的字符。。当你看到这里,应该对这道题大致的思路了解了。。
代码如下:
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); String s=in.next(); int k=1; boolean flag=false; while(!flag){ if(k>s.length()/2){//k大于长度的一半不必继续查找,节省1/4时间,不然运行超时 k=s.length();//字符串的长度是周期 flag=true; } if(s.length()%k==0){//可能是要找的。k是要长度的因数,如果不是长度的因数就可能不够分 for(int i=1;i
转载地址:http://nuwkf.baihongyu.com/