【字符串】3. 无重复字符的最长子串

题目:

解答:

怎么确认一个字符是否已经存在于子串中呢?策略是用一个表存储已经出现过的字符。

请向面试官沟通交流:给定的字符串除了'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 };

猜你喜欢

转载自www.cnblogs.com/ocpc/p/12822456.html