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

 

posted @ 2014-06-01 16:48  阿杰的专栏  阅读(131)  评论(0编辑  收藏  举报