码迷,mamicode.com
首页 > 其他好文 > 详细

最长回文子串解法

时间:2017-05-21 01:07:39      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:repeat   out   des   重复   保存   blog   char   格式   []   

 

原题地址:https://leetcode.com/problems/longest-substring-without-repeating-characters/#/description

 

没咋么过脑子,瞬间能想到的思路大概为:

 

 "abcabcbb"
比如这个字符串
首先 声明一个数组  里面存放各种开分来的字符串; 切分条件是当这次循环的值 存在于当前的数组中
 
 像这样
abc bca cab abc bcb cb
 
最初的实现代码:
var str = "";
    //生成一些随机字符
    for(var i =0;i<1000000;i++){
        str +=String.fromCharCode(Math.floor(97+Math.random()*(122-97)));
    }
    
    var resulte = [];//保存字符串结果
    var index = 0;//索引

while(str.length){
        for(var i =0;i<str.length;i++){
            resulte[index] = resulte[index]||"";
            if(resulte[index].indexOf(str[i]) === -1){
                resulte[index]+=str[i];
            }else{
                break;
            }
        }    
        str = str.slice(1);
        index++;
    }
    console.log(resulte)

 

第二日优化代码:

思路:

bcadeaopqrxyz

当上面的2个a 相遇的时候

第一个数组中应该存放的值为: bcade

首先能确定的是 bcade 肯定是正确的格式(无重复的字符串)

其次能确定的是  bcadea 绝对大过于 cade ade de 

也就是说 第一个a之前的值不用再循环了,循环直接从第一个a后面的值开始即可;

var str = "";
    //生成一些随机字符
    for(var i =0;i<1000000;i++){
        str +=String.fromCharCode(Math.floor(97+Math.random()*(122-97)));
    }
    var resulte = [];//保存字符串结果
    var index = 0;//索引
    var maxStr = "";



while(str.length){
        for(var i =0;i<str.length;i++){
            resulte[index] = resulte[index]||"";
            if(maxStr.length > str.length){
                str = "";
                break;
            }
            var _pos  = resulte[index].indexOf(str[i]);
            var _step = 0;
            if(_pos === -1){
                resulte[index]+=str[i];
                maxStr = maxStr.length < resulte[index].length ? resulte[index] : maxStr;
            }else{
                // resulte[index+1] = resulte[index].slice(_pos+1) //这里还可优化
                _step = str.indexOf(str[i]);
                break;
            }
        }    
        str = str.slice(_step+1);
        index++;
    }
console.log(maxStr)

 

最长回文子串解法

标签:repeat   out   des   重复   保存   blog   char   格式   []   

原文地址:http://www.cnblogs.com/websir/p/6883704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!