leetcode[Repeated Substring Pattern]//待整理多种解法

本文介绍了一种用于判断一个字符串是否由其子串重复组成的算法。通过不断尝试不同的子串长度并检查整个字符串是否能完全由该子串组成来实现这一目标。此算法能够有效地解决诸如ababab等非2的幂次倍数的重复子串问题。

解法一:

public class Solution {
    public boolean repeatedSubstringPattern(String s) {
        /*int length = s.length();
        if(length == 0)
        	return true;
        
        int count = 0;//用于计数,记录字符串s被切割了几次,初始应该是0,每判断一次判断长度能否被2整除就加1
        while(length != 0 && length % 2 == 0){//将字符串切成一半一半的,去找是否由重复的子串形成,子串的形成有大有小,所以用循环
        	count++;
        	length /= 2;
        	String tmp = s.substring(0, 0 + length);
        	StringBuilder is = new StringBuilder();
        	for(int i = 0; i <= count; i++){//根据重复次数来拼凑
        		is.append(tmp);
        		System.out.println(is);
        	}
        	
        	if(is.toString().equals(s)){
        		return true;
        	}
        }
        
        return false;*/
    	
    	//上面那种解法不对,每次将字符串s对半分,但是存在“ababab”的情况,不是2的幂,刚好重复3次
    	//换种思路,记录重复子串的长度
    	int length = s.length();
    	if(length <= 1)
    		return false;
    	int repeat = 1;//要判断也是从1开始,子串最小长度是1
    	while(repeat <= length / 2){//最大重复长度是length/2
    		if(length % repeat == 0){
    			String temp = s.substring(0, 0+repeat);//取出重复的子串
    			int cc = length / repeat;//记录重复次数
    			StringBuilder sb = new StringBuilder();
    			for(int i = 0; i < cc; i++){//用子串拼接
    				sb.append(temp);
    				//System.out.println(sb);
    			}
    			if(sb.toString().equals(s)){
    				return true;
    			}
    		}
    		
    		repeat++;
    	}
    	
    	return false;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值