1. 程式人生 > >最長回文子串解法

最長回文子串解法

scrip 回文子串 index += substr bstr 應該 ges leetcode

原題地址: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)

最長回文子串解法