(LeetCode 面试经典 150 题 )3. 无重复字符的最长子串 (哈希表+双指针)
题目:3. 无重复字符的最长子串
思路:哈希表+双指针,时间复杂度0(n)。
哈希表维护左右指针间的字符出现情况,左指针在右指针字符数量mp[s[right]]>1时滑动。
C++版本:
class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_map<char,int> mp;int mx=0;for(int left=0,right=0;right<s.size();right++){mp[s[right]]++;while(mp[s[right]]>1){mp[s[left]]--;left++;}mx=max(mx,right-left+1);}return mx;}
};
JAVA版本:
class Solution {public int lengthOfLongestSubstring(String s) {char[] c=s.toCharArray();int n=c.length;int mx=0;Map<Character,Integer> mp=new HashMap<>();for(int l=0,r=0;r<n;r++){mp.merge(c[r],1,Integer::sum);while(mp.get(c[r])>1){mp.merge(c[l],-1,Integer::sum);l++;}mx=Math.max(mx,r-l+1);}return mx;}
}
GO版本:
func lengthOfLongestSubstring(s string) int {mp:=map[byte]int{}mx:=0for left,right:=0,0;right<len(s);right++ {mp[s[right]]++for mp[s[right]]>1 {mp[s[left]]--left++}mx=max(mx,right-left+1)}return mx
}