Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
题目就是寻找一个给定字符串中的不重复最长字串的长度。题目很简单,直接搜索就可以。这里使用hash表会更快:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int start = 0;
int maxlen = 0;
int table[256]; // 256位ASCII码
for (int i = 0;i < 256;i++) table[i] = -1; // 初始化表示未检测
int len = s.length();
for (int i = 0;i < len;i++) {
if (table[s[i]] != -1) {
while (start <= table[s[i]]) table[s[start++]] = -1;//剔除之前发现的子串
}
if (i - start + 1 > maxlen) maxlen = i - start + 1;
table[s[i]] = i;//当前检测的记为i,当下一次发现同样的字母时,会去到上面的IF进行剔除
}
return maxlen;
}
};