菜鳥妹子昨天被虐的算法題 ,難過~

給定一個字符串,找出不含有重複字符的最長子串的長度。

示例:

給定 "abcabcbb" ,沒有重複字符的最長子串是 "abc" ,那麼長度就是3。
給定 "bbbbb" ,最長的子串就是 "b" ,長度是1。
給定 "pwwkew" ,最長子串是 "wke" ,長度是3。

開始想法

碰到這個題第一反應,來個去重吧,明顯的去重意思呀 ~ 結果越寫以爲越不對勁,啥東西 ~好像跟去重沒多大關係, 數組

好吧,開始本身想思路吧 ~spa

思路

比對是否有重複的元素,第一個放到一個字符串裏,第二個與第一個比較,第三個與前兩個比較.... 遇到重複值即中止 ,啊 哈哈哈哈~想到了 ,我真是把本身蠢死了,當我看到第三個示例的時候,好像個人思路不太對啊,萬一重複以後,後面的字符串又有更長的怎麼辦 ???code

沉思

那就要判斷兩種了,一旦碰到重複的值,就要清空從新計算了,接下來思路大概有了,開始動手啦 ~首先科普兩個知識(大佬就略過就能夠)
數組的length是屬性,如cdn

char c[]=new char[5];
int a=c.length
複製代碼

字符串的length是方法:blog

String s="abcd";
int a=s.lenth();
複製代碼

來嘍,來嘍,它真的來嘍 ~字符串

function lengthOfLongestSubstring(str) {
    var newStr = '';  //存放字符串
    var len = 0;   //放最大長度
    for( var i=0; i<str.length; i++){
        // 'abc'.indexOf('a');
       let index = newStr.indexOf(str[i]);
       if(index === -1) {
           newStr += str[i];
            //比對長度
           len = len < newStr.length? newStr.length:len;
       }else {
           // 從新拼接字符串
           newStr = str[i];     
       }
    }
    return len;
};
console.log(lengthOfLongestSubstring('abcabcbb'));
console.log(lengthOfLongestSubstring('bbbbb'));
console.log(lengthOfLongestSubstring('pwwkew'));
複製代碼

惋惜本仙女沒有答上,難過,本仙女繼續努力啦 ,下期見!string

相關文章
相關標籤/搜索