题目描述:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例1:
输入: "abcabcbb"
输出: 3
解释: 无重复字符的最长子串是 "abc",其长度为 3。
示例2:
输入: "bbbbb"
输出: 1
解释: 无重复字符的最长子串是 "b",其长度为 1。
示例3:
输入: "pwwkew"
输出: 3
解释: 无重复字符的最长子串是 "wke",其长度为 3。
请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。
Accepted C++ Solution: (From leetcode.com )
class Solution {
public:
int lengthOfLongestSubstring(string s) {
vector<int> dict(256,-1);
int maxlen = 0, start = -1;
for (int i = 0; i != s.length(); i++) {
if (dict[s[i]] > start) //此时字符重复出现
start = dict[s[i]]; //更新起始位置
dict[s[i]] = i;
maxlen = max(maxlen, i-start); //不论是否出现重复,i-start都是字符串长度
}
return maxlen;
}
};
很巧妙的一种方法,和哈希表很像,不过使用char来作为下标。