LC3-Longest Substring Without Repeating Characters

https://leetcode.com/problems/longest-substring-without-repeating-characters/

给一个字符串,找其中最长的一个子串,要求子串中没有重复的字符

 

O(N)解法:

双指针解法,用两个端点定义一个滑窗,两端点起始位置都是0

每次右端点向前移动,判断右端点的当前字符是否在滑窗中出现过

如果没有的话,更新答案

如果有的话,移动左端点直至移动到与右端点字符相同的字符的后面,这样就保证新的滑窗中的字符全不重复,移动过程中更新路径上字符的出现状态

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         int l=0,r=0;
 5         int len = s.length();
 6         int ans = 0;
 7         bool vis[256] = {0,};
 8 
 9         for(;r<len;r++){
10             if(!vis[(int)s[r]]){
11                 vis[(int)s[r]] = true;
12                 int now = r-l+1;
13                 if(now>ans) ans = now;
14             }else{
15                 while(s[l]!=s[r]){
16                     vis[(int)s[l]] = false;
17                     l++;
18                 }
19                 l++;
20             }
21         }
22         
23         return ans;
24     }
25 };
代码

 

posted @ 2020-05-24 13:15  Osoii  阅读(219)  评论(0)    收藏  举报