Leetcode 3. Longest Substring Without Repeating Characters
2016-08-24 17:22
387 查看
题意:求字符串中的最长非重复子串
思路 :用O(n)即可
要求知道每次字符的上一次出现的位置
例如
0 1 2 3 4 5
a a b c b c
首先将每个字符的上次位置初始化为-1,左边界left设为0,当前子串长度now_sum为0
遍历过程:
i=0: a的上次位置为-1,小于边界0,故now_sum加1。同时a的上次位置变成0
i=1: a的上次位置为0,大于等于边界0,所以再利用原边界将出现重复。故先计算now_sum与ans的大小,接着再重置now_sum为当前位置减上次位置。最后再把左边界设为上次位置+1,即为1
i=2 : now_sum++
i=3: now_sum++
i=4:发现b的上次位置为2,大于边界1,故ans变成3,同时左边界变成3.
……同理
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int last_char[250],left,ans,i,n,c,now_sum;
for(i=0;i<250;i++)
last_char[i]=-1;
left=0;
ans=0;
now_sum=0;
n=s.length();
for(i=0;i<n;i++)
{
c=s[i];//字符ASCII码
if(last_char[c]>=left) //若上一个同字符位置大于等于左边界,则修改边界
{
if(now_sum>ans)
ans=now_sum;
now_sum=i-last_char[c]; //新的now_sum值为当前位置减去上一个字符位置
left=last_char[c]+1; //边界为上一个字符位置+1
}
else
{
now_sum++;
}
last_char[c]=i; //此字符的上一个位置
}
if(now_sum>ans)
ans=now_sum;
return ans;
}
};
相关文章推荐
- [leetcode]3. Longest Substring Without Repeating Characters
- leetCode刷题记录-3. Longest Substring Without Repeating Characters
- leetcode--3. Longest Substring Without Repeating Characters
- leetcode 3. Longest Substring Without Repeating Characters dp
- LeetCode3. Longest Substring Without Repeating Characters
- [Leetcode]3. Longest Substring Without Repeating Characters
- LeetCode 3. Longest Substring Without Repeating Characters
- 【Shawn-LeetCode】3. Longest Substring Without Repeating Characters
- LeetCode 3. Longest Substring Without Repeating Characters
- [LeetCode] 3. Longest Substring Without Repeating Characters
- [leetcode: Python]3. Longest Substring Without Repeating Characters
- LeetCode3. Longest Substring Without Repeating Characters
- leetcode 3. Longest Substring Without Repeating Characters My Submissions QuestionEditorial Solution
- LeetCode - 3. Longest Substring Without Repeating Characters
- leetcode 3. Longest Substring Without Repeating Characters
- Leetcode刷题记——3. Longest Substring Without Repeating Characters
- LeetCode题解(Week 16):3. Longest Substring Without Repeating Characters
- leetcode-3. Longest Substring Without Repeating Characters
- LeetCode||3. Longest Substring Without Repeating Characters
- Leetcode-3. Longest Substring Without Repeating Characters