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 };

浙公网安备 33010602011771号