3. 无重复字符的最长子串
题目描述
给定一个字符串,请找出最长的不包含重复字符的子串。
请注意子串和子序列的区别:
子串一定是连续的一段
子序列不一定是连续的一段,但下标要求是递增的
样例
给定 "abcabcbb",答案是"abc",长度是3.
给定 "bbbbb",答案是"b",长度是1.
给定 "pwwkew",答案是"wke",长度是3.
题解
双指针算法:O(n)
class Solution { public: int lengthOfLongestSubstring(string s) { unordered_map<char,int>hash; int res=0,len=s.size(); for(int i=0,j=0;j) { hash[s[j]]++; while(hash[s[j]]>1) hash[s[i++]]--; res=max(res,j-i+1); } return res; } };
暴力枚举O(n3)
class Solution { public: int lengthOfLongestSubstring(string s) { int maxLen = 0; if(!s.size()) return maxLen; for(int i = 0; i < s.size(); i++){ for(int j = 0; j < s.size(); j++){ if(isUniq(s, i, j)) maxLen = max(maxLen, j-i+1); } } return maxLen; } bool isUniq(string s, int start, int end){ set<char> uniqSet; for(int i = start; i <= end; i++){ if(uniqSet.count(s[i])) return false; uniqSet.insert(s[i]); } return true; } };