您的位置:首页 > 其它

LeetCode-003 Longest Substring Without Repeating Characters

2014-05-13 16:16 387 查看

【题目】

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个ASCII码,所以建一个256长度的布尔数组isExisted[256]即可

方法:

1. 使用两个指针p1, p2, 初始时都指向字符串头

2. p2指针不断向后扫描,没有出现过的字符都要在isExisted[256]标记,直到遇到已经出现过的字符停止,比如我们用X表示

3. 计算此时子串长度p2-p1;

4. p1向后扫描,直到指向X为止,扫描过程中,将所有字符都标记为false,即还没出现过。

5. p1指向X的后一个字符

6. 重复2,3,4,5直到p2扫完字符串

【代码】

class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length()==0)return 0;
int p1=0, p2=0;
int maxlen=0;
bool isExisted[256];
memset(isExisted, false, 256);
while(p2<s.length()){
if(isExisted[s[p2]]){
maxlen=max(p2-p1, maxlen);
while(p1<p2&&s[p1]!=s[p2]){
isExisted[s[p1]]=false;
p1++;
}
isExisted[s[p1]]=false;
p1++;
}
else{
isExisted[s[p2]]=true;
p2++;
}
}
maxlen=max(p2-p1, maxlen);  //别漏了最后一个子串
return maxlen;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: