zoukankan      html  css  js  c++  java
  • LeetCode459-重复的子串(枚举)

    1、枚举

    /**
     * @param {string} s
     * @return {boolean}
     */
    var repeatedSubstringPattern = function(s) {
        
        //其实枚举即可呢。。。
        if(s.lenght<2)
            return false;
        
        //每次枚举组成的滑动窗口都试一次即可
        let len = 1;
        
        while(len<s.length){
            
            let ok = true;
            
            //每次从len之后开始
            for(let i=len;i<s.length;i++){
                if(s[i]==s[i%len]){
                    continue;
                }else{
                    len++;
                    ok = false;
                    break;
                }
            }
            
            if(ok){
                break;
            }
            
        }
        
        if(len<s.length&&s.length%len==0){
            return true;
        }else{
            return false;
        }
        
            
        
        
    };

    2、小滑动窗口,其实也没有优化到什么

    var repeatedSubstringPattern = function(s) {
        
        if(s.length<2)
            return false;
        
        let len = 1;
        
        for(let i=1;i<s.length;){
            if(s[i]==s[i%len]){
                i++;
                continue;
            }else{
                //增长滑动窗口,并从滑动窗口后一个数字开始比较
                len++;
                i=len;
            }
        }
        
        if(len<s.length&&s.length%len==0){
            return true;
        }else{
            return false;
        }
        
        
    };

    大滑动窗口,解法很简单,但是只能通过114

    var repeatedSubstringPattern = function(s) {
        
        //a
        //aba
        //abaab abaab
        //滑动窗口,从第一个开始增长
        //如果当前元素结尾的词组并不能和字串对应了,滑动窗口就增长到该位置
        
        //字串长度
        let len = 1;
        
        //第一个肯定是,可以跳过了
        for(let i=1;i<s.length;i++){
            if(s[i]==s[i%len]){
                continue;
            }else{
                //此时字串就是[0,i]
                len=i+1;
            }
        }
        
        //滑动串口和字符串一样长,就是说这个字符串不能由字串重复生成
        //重复生成的话,总长度/字串肯定是整数
        if(len!=s.length&&s.length%len==0)
            return true;
        else
            return false;
            
        
        
    };

    kmp太难!不管了,做出来就行。

    做题一定要先考虑最简单的揭发,不要考虑什么滑动窗口,想了半天还不对

  • 相关阅读:
    各自的特点:
    errno
    内存(堆)的动态申请和释放
    printf和scanf中的%控制
    linux中软件包管理
    Ubuntu新装系统要装软件
    数组
    linux c中需要记住的东西
    硬件设计中的一些思路
    传输线理论
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9846986.html
Copyright © 2011-2022 走看看