LeetCode题解——Longest Substring Without Repeating Characters

题目

给定一个字符串,返回其中不包含重复字符的最长子串长度。

 

解法

维持两个指针,第一个指向子串开始,第二个负责遍历,当遍历到的字符出现在子串内时,应计算当前子串长度,并更新最长值;然后第一个指针更新为出现位置的下一个。

 

代码

 1 class Solution {  2 public:  3     int lengthOfLongestSubstring(string s) {  4         int last_pos[256];           //记录每个字符最后一次出现位置  5         fill(last_pos, last_pos + 256, -1);  6         

 7         int start = 0, max_len = 0;  //start指向当前子串第一个字符  8         int slen  = s.size();  9         

10         for(int stop = 0; stop < slen; ++stop)   //stop用于遍历 11  { 12             char c = s[stop]; 13             

14             if(last_pos[c] >= start)      //stop指向的字符出现在子串内部 15  { 16                 max_len = max(stop - start, max_len);  //更新最长值 17                 start   = last_pos[c] + 1;             //更新第一个字符指针 18  } 19             last_pos[c] = stop;  //更新当前字符最后出现位置 20  } 21         

22         return max(max_len, slen - start);    //循环停止时,最后一个子串没有参与计算,所以在这里计算其长度并对比 23  } 24 };

 

你可能感兴趣的:(substring)