美文网首页
JS中最长子串求取

JS中最长子串求取

作者: 陆璐monica | 来源:发表于2019-12-09 16:45 被阅读0次

    从不确定字符串中获取最长子串。
    该字符串可能:

    1. 包含长度不等但字符相同的子串 例如aabbbbbsssssssaaaaaaaaaajjooo(这个导致下方函数中变量arr[字符]需要重置)
    2. 字符串中不仅只有a-z中的字符还有其他不确定字符
    3. 字符串不给定,是可变的
    4. 可能存在相同长度的子字符串(这个导致还需要另外一个循环来取值)

    实现方法

    // 这个str是可变的,这里为了方便测试写死了
    let str = 'aabbbbbsssssssaaaaaaaaaajjooooooooooooowwwwwwwwwww';
    let arr = {}, strArr = [], max = 0;
    let maxStrArr = {}, maxChildStr = []
    strArr = str.split('');
    for (let i = 0, length = strArr.length; i < length; i++) {
        arr[strArr[i]] = arr[strArr[i]] ? arr[strArr[i]] + 1 : 1;
        if (arr[strArr[i]] >= max && (strArr[i] !== strArr[i + 1])) {
            max = arr[strArr[i]];
            maxStrArr[strArr[i]] = max
        }
    
        strArr[i] !== strArr[i + 1] ? arr[strArr[i]] = 0 : '';
    
    }
    for (let i in maxStrArr) {
        if (max === maxStrArr[i]) {
            let maxStr = ''
            while (maxStrArr[i] > 0) {
                maxStr += i;
                maxStrArr[i]--
            }
            maxChildStr.push(maxStr)
        }
    }
    console.log(maxStrArr, maxChildStr);
    

    实现思路:

    1. 将给定字符串分割成数组strArr
    2. 循环遍历该数组strArr,每一次循环到相同字符则数量加1,直到下一个字符非本字符串内字符
    3. 和max进行比较,将比max值大的字符和其长度存储在maxStrArr对象中,并置空arr中该字符的长度(避免下一次出现和该字符相同字符造成长度累加)
    4. 由于上一个循环中只简略的进行了一次排序,所以需要进行再一次的循环取最大值(这里我们已经获取了字符最长的数量max,后续只要取和max相等的字符,并将其拼接起来)

    说明:
    这个代码可能还有问题,但是我暂时还没想到,感觉这个是我暂时想到最简短的.......有更好的解决方法的话,欢迎留言告诉我。

    相关文章

      网友评论

          本文标题:JS中最长子串求取

          本文链接:https://www.haomeiwen.com/subject/dyxigctx.html