题目描述
给定一个字符串,找出最长的不具有重复字符的子串的长度。例如,“abcabcbb”不具有重复字符的最长子串是“abc”,长度为3。对于“bbbbb”,最长的不具有重复字符的子串是“b”,长度为1。
思路:
滑动窗口方式,即一旦发现新来的元素与当前窗口内的元素相等,那么调整窗口为之前重复元素的下一个
具体实现采取 Map<char,int>即存放当前元素的位置下标
int lengthOfLongestSubstring(string s){int len = s.length();if(len==0) return 0;int maxLen = 0,left = 0;map<char,int> charMap;for(int i=0;i<len;i++){if(charMap.find(s[i]) != charMap.end())left = max(left,charMap[s[i]]+1);maxLen = max(maxLen,i-left+1);charMap[s[i]] = i;}return maxLen; }