您的位置:首页 > 其它

Longest Substring Without Repeating Characters

2017-10-19 19:09 190 查看
//first one,时间复杂度o(n)

//使用map表,键值分别记录每一个字符和其对应的最后一次出现的位置

//start表示最左合法边界,当m[c]>start时出现重复字符,则start+1调整边界

int lengthOfLongestSubstring(string s)
{
int res = 0;
map<char, int> m;
int start = 1;
for (int i = 1; i <= s.length(); i++)
{
char c = s[i - 1];
if (m[c] >= start)
{
start = m[c] + 1;
m[c] = i;

}
else
{
m[c] = i;
res = max(res, i - start + 1);
}

}
return ret;
}


//second one,时间复杂度o(n)

//也是调整边界

int lengthOfLongestSubstring(string s)
{
// 题意为求不包含重复字符的最长子串
// left用以记录合法的最远左边界位置,last记录字符上一次出现的位置
int ans = 0, left = 0, len = s.length();
int last[255];
memset(last, -1, sizeof last);

for (int i = 0; i < len; i++) {
// 上次出现位置在当前记录边界之后,即该子串中出现了重复字符,需调整left使得子串合法
if (last[s[i]] >= left)
left = last[s[i]] + 1;

last[s[i]] = i;
ans = max(ans, i - left + 1);
}
return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: