LeetCode-重复的子字符串(459)

题目描述:

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
在这里插入图片描述
思路一: 使用枚举的方法。首先因为字符串s有一个子串重复多次构成,那么s的长度len与子串的长度subLen应该成倍数关系,并且在s中索引为i的字符应该与索引为i+subLen的字符相等。根据这些我们可以首先设置一个循环对从1到len/2的子串长度进行处理(因为子串至少重复一次所以最大长度为len/2),接着判断子串长度是否和s长度len成倍数关系,如果是就再设置一个for循环来对s中的每一个字符进行验证,如果在字符串s中索引为j的字符不等于索引为j-i的字符(在下面代码中,i为子串长度)则设置要返回的布尔型设置为false。每次内层for循环结束后都要判断设置布尔型变量是否为true,如果为true直接返回,为false则按照外层循环递增的子串长度继续执行代码,如果整个双层循环执行完都未返回则说明字符串s不符合条件,直接返回false。

思路二: 第二种思路比较简单,因为符合条件的字符串s都是由多个子串n重复组成的,所以这里将s表示为kn+n,相当于s1=kn,s2=n,s=s1+s2。所以将两个s拼接成一个新的字符串,并且删除首尾两个字符,那么新字符串从s1+s2+s1+s2变成了s3+s2+s1+s4,这时只需判断这个字符串内是否包含原字符串s即可。

代码:

class Solution {
   

    public boolean repeatedSubstringPattern(String s) {
   
        //return repeatedSubstringPattern1(s);    
        return repeatedSubstringPattern2(s);    
        
    
    }



    public boolean repeatedSubstringPattern1(String s) {
   
        if(s.length()==1) {
   
            return false;
        }
        int len=s.length();
        for(int i=1;i<=len/2;i++) {
   
            if(len%i==0) {
   
                boolean match=true;
                for(int j=i;j<len;j++) {
   
                    if(s.charAt(j)!=s.charAt(j-i)) {
   

                        match=false;
                        break;
                    }

                }
                if(match) {
   
                    return true;
                }
            
            }
           

        }
        return false;
        
    }

    public boolean repeatedSubstringPattern2(String s) {
   
        
        String str=s+s;
        return str.substring(1,str.length()-1).contains(s);
        
    }
    
}

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 20:22:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 20:22:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 20:22:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 20:22:03       18 阅读

热门阅读

  1. vue项目打包体积大优化之-productionSourceMap设置

    2024-01-07 20:22:03       37 阅读
  2. MyBatis-Plus实现自定义SQL语句的分页查询

    2024-01-07 20:22:03       46 阅读
  3. 理解机器学习中的术语

    2024-01-07 20:22:03       36 阅读
  4. 文件单行读取与批量读取

    2024-01-07 20:22:03       44 阅读