给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2:
输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
var arr = [],
max = 0;
for(var guard of s){
if(arr.includes(guard)){
var index = arr.indexOf(guard);
arr.splice(0, index+1);
}
arr.push(guard);
max = Math.max(max, arr.length);
}
return max;
};
/*
* Java解法
*/
class Solution {
public int lengthOfLongestSubstring(String s) {
int n = s.length(),
ans = 0;
Map<Character, Integer> map = new HashMap<>();
for(int start = 0, end = 0; end < n; end++){
char temp = s.charAt(end);
if(map.containsKey(temp)){
start = Math.max(map.get(temp), start);
}
ans = Math.max(ans, end - start + 1);
map.put(temp, end + 1);
}
return ans;
}
}