您的位置:首页 > 其它

Longest Substring Without Repeating Characters——经典题

2015-06-04 18:55 344 查看
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

历遍字符串,当当前字符出现过的时候,子串开始位置+1,否则更新locs数组中的hash值为当前位置。

其实就是用两个指针,判断出字符串中所有重复出现的字符的长度,选出最大值即可,复杂度O(n) + O(n) = O(n),而不是Ο(n2)

这道题纠结了我好久啊!!!!!

(其实这道题和Trapping Rain WaterContainer With Most Water这两道题有异曲同工之妙)

看了这篇博客:http://www.cnblogs.com/dollarzhaole/p/3155712.html

class Solution {
public:
int lengthOfLongestSubstring(string s) {
int locs[256];//保存字符上一次出现的位置
memset(locs, -1, sizeof(locs));

int idx = -1, max = 0;//idx为当前子串的开始位置-1
for (int i = 0; i < s.size(); i++)
{
if (locs[s[i]] > idx)//如果当前字符出现过,那么当前子串的起始位置为这个字符上一次出现的位置+1
{
idx = locs[s[i]];
}

if (i - idx > max)
{
max = i - idx;
}

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