美文网首页
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中最长子串求取

    从不确定字符串中获取最长子串。该字符串可能: 包含长度不等但字符相同的子串 例如aabbbbbsssssssaaa...

  • 最长不重复子串

    1. 问题定义 最长不重复子串:一个字符串中最长的没有重复字符的子串。举个? : abcabcbb 最长子串 a...

  • 3. Longest Substring Without Rep

    题目要求找出一个字符串中最长的没有重复字符的子串长度。如pwwkew中的不含重复字符的最长子串为wke(kew也行...

  • 牛客——最长子字符串

    1. 02最长子字符串 题目 牛牛有两个字符串(可能包含空格),牛牛想找出其中最长的公共连续子串,希望你能帮助他...

  • 最长子串

    题目 Given a string, find the length of the longest substri...

  • 简单JS问题总结

    1、用JS写一个函数,查询字符串中'hello'的所有位置? 2、用JS写一个函数,查询字符串中最长的单词? 3、...

  • 【leetcode-字符串】无重复字符的最长子串

    【leetcode-字符串】无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。...

  • 无重复字符的最长子串

    给定一个字符串,找出不含有重复字符的最长子串的长度。 示例: 给定 "abcabcbb" ,没有重复字符的最长子串...

  • 3. 无重复字符的最长子串-LeetCode

    给定一个字符串,找出不含有重复字符的最长子串的长度。 示例: 给定 "abcabcbb" ,没有重复字符的最长子串...

  • 15 - Medium - 无重复字符的最长子串

    给定一个字符串,找出不含有重复字符的最长子串的长度。 示例: 给定 "abcabcbb" ,没有重复字符的最长子串...

网友评论

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

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