菜鸟妹子昨天被虐的算法题 ,难过~

506 阅读1分钟

给定一个字符串,找出不含有重复字符的最长子串的长度。

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
给定 "pwwkew" ,最长子串是 "wke" ,长度是3。

开始想法

碰到这个题第一反应,来个去重吧,明显的去重意思呀 ~ 结果越写觉得越不对劲,啥东西 ~好像跟去重没多大关系,

好吧,开始自己想思路吧 ~

思路

比对是否有重复的元素,第一个放到一个字符串里,第二个与第一个比较,第三个与前两个比较.... 遇到重复值即停止 ,啊 哈哈哈哈~想到了 ,我真是把自己蠢死了,当我看到第三个示例的时候,好像我的思路不太对啊,万一重复之后,后面的字符串又有更长的怎么办 ???

沉思

那就要判断两种了,一旦碰到重复的值,就要清空重新计算了,接下来思路大概有了,开始动手啦 ~首先科普两个知识(大佬就略过就可以)
数组的length是属性,如

char c[]=new char[5];
int a=c.length

字符串的length是方法:

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'));

可惜本仙女没有答上,难过,本仙女继续努力啦 ,下期见!