leetcode 3.无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
思路://首先想到一个枚举的思路,再想到从枚举的结果中,剔除没意义的结果;
1、通过两个指针begin与i指针(数组下标),维护满足要求的窗口;
2、设置临时word字符串,记录当前字符串是否有重复字符;
3、利用哈希字符,记录该字符是否重复了(记录出现次数>1即为重复);
4、若有重复,移动begin指针,直到当前i所指的字符出现次数不大于1,移动过程中,begin所指的字符出现次数都减减;
5、重新设置word,使word为移动后的begin与i之间的字符串;
代码:
1 #include"iostream" 2 #include"algorithm" 3 using namespace std; 4 5 6 class Solution 7 { 8 public: 9 int lengthOfLongestSubstring(string s) 10 { 11 //s[start,end) 前面包含 后面不包含 12 int start(0), end(0), length(0), result(0); 13 int sSize = int(s.size()); 14 while (end < sSize) 15 { 16 char tmpChar = s[end]; 17 for (int index = start; index < end; index++) 18 { 19 if (tmpChar == s[index]) 20 { 21 start = index + 1; 22 length = end - start; 23 break; 24 } 25 } 26 end++; 27 length++; 28 result = max(result, length); 29 } 30 return result; 31 } 32 }; 33 34 //class Solution { 35 //public: 36 // int lengthOfLongestSubstring(string s) { 37 // int begin = 0; //窗口指针,数组下标 38 // int result = 0; 39 // string word = ""; 40 // int char_map[128] = { 0 }; 41 // for (int i = 0; i < s.length(); i++) { 42 // char_map[s[i]]++; 43 // if (char_map[s[i]] == 1) { 44 // word = word + s[i]; 45 // if (result < word.length()) { 46 // result = word.length(); 47 // } 48 // } 49 // else 50 // { 51 // while (begin < i && char_map[s[i]]>1) { 52 // char_map[s[begin]]--; 53 // begin++; 54 // } 55 // word = ""; 56 // for (int j = begin; j <= i; j++) { 57 // word = word + s[j]; 58 // } 59 // } 60 // } 61 // return result; 62 // } 63 //}; 64 65 //测试 66 int main() 67 { 68 string s = "pwwkew"; 69 Solution s1; 70 int i = s1.lengthOfLongestSubstring(s); 71 cout << i << endl; 72 system("pause"); 73 return 0; 74 }

浙公网安备 33010602011771号