1.题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
代码实现
const lengthOfLongestSubstring = function(s) {
let map = new Map(), max = 0
for(let i = 0, j = 0; j < s.length; j++) {
if(map.has(s[j])) {
i = Math.max(map.get(s[j]) + 1, i)
}
max = Math.max(max, j - i + 1)
map.set(s[j], j)
}
return max
};
2.题目
给定一个字符串,请你找出其中出现每个重复字符的 最长 长度。
示例1:
输入: "aabacc"
输出: { a: 2, b: 1, c: 2 }
示例2:
输入: "aabbbaaafbb"
输出: { a: 3, b: 3, f: 1 }
代码实现
const objOfRepeateString = (str) => {
const strList = [...str];
const len = strList.length;
const obj = Object.create(null);
let index = 0;
for (let i = 1; i < len; i++) {
const pre = strList[i - 1];
if (strList[i] !== pre) {
if(!obj[pre]) obj[pre] = i - index;
else obj[pre] = Math.max(i - index, obj[pre]);
index = i
}
}
const last = strList[len - 1];
obj[last] = obj[last] ? Math.max(len - index, obj[last]) : len - index;
return obj;
}