题目:
解答:
怎么确认一个字符是否已经存在于子串中呢?策略是用一个表存储已经出现过的字符。
请向面试官沟通交流:给定的字符串除了'a' - 'z'外,是否还有其他字符,比如Digits、Upper case letter。是否只是包含ASCII码?或者Unicode字符集合?
1 class Solution { 2 public: 3 int lengthOfLongestSubstring(string s) 4 { 5 int n = s.length(); 6 7 int i = 0; 8 int j = 0; 9 10 int maxLen = 0; 11 12 bool exist[256] = { false }; 13 14 while (j < n) 15 { 16 if (exist[s[j]]) 17 { 18 maxLen = max(maxLen, j-i); 19 //更新i和exist数组,将j之前exist[]全部置为false 20 while (s[i] != s[j]) 21 { 22 exist[s[i]] = false; 23 i++; 24 } 25 i++; 26 j++; 27 } 28 else 29 { 30 exist[s[j]] = true; 31 j++; 32 } 33 } 34 //最后一个哦,不要忘记 35 maxLen = max(maxLen, n-i); 36 return maxLen; 37 } 38 };