您的位置:首页 > 其它

[LeetCode]Longest Substring Without Repeating Characters

2013-10-08 14:51 239 查看
此题用一个hash table保存每个字符上一次出现过的位置。从前往后扫描,假如发现字符上次出现过,就把当前子串的起始位置start移动到上次出现过的位置之后——这是为了保证从start到i的当前子串中没有任何重复字符。同时,由于start移动,当前子串的内容改变,start移动过程中经历的字符都要剔除。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int start = 0; // current start point of substring without dup
int maxlen = 0; // max length of substring found
int table[256]; // hash table for index of each char appeared
for (int i = 0;i < 256;i++) table[i] = -1; // if char not present, index is -1
for (int i = 0;i < s.length();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;
}
return maxlen;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息