您的位置:首页 > 其它

[leetcode] Longest Substring Without Repeating Charactors最长无重复子序列

2016-03-09 16:52 288 查看

题目

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of
1.

分析

1.一个字符串中可能有很多的无重复子串

2.无重复子串肯定是互相独立的,否则某个子串其中必定包含重复的字符。

算法

1.建立两个指针lft, rgt,分别指向无重复子序列的左端和右端

2.建立一个布尔数组,长为128,记录ASCII字符,初始为false,遍历之后改为true
3.每次检查有指针所指字符的标签,

如果为false(即无重复),则标签改为true,有指针向前移,子序列长度为rgt-lft;

如果为true(即之前遍历过了),则将lft所指字符标签改为false(清除遍历记录,更新子序列头部),左指针前移。

算法只将字符串遍历了一遍,因此复杂度为O(n).

知识点

左右指针,flag表

代码

class Solution {
public:
int lengthOfLongestSubstring(string s) {
    int len = s.length();
    if( len < 2 )    return len;
    int rgt = 0, lft = 0, maxlen = 0;
    bool sign[128] = {false};
    while( rgt < len ){
        if( sign[ s[rgt] ] == false ){
            sign[ s[rgt] ] = true;
            rgt++;
            if(maxlen < rgt-lft)
                maxlen = rgt - lft;
        }
        else{
            sign[ s[lft] ] = false;
            lft++;
        }
    }
    return maxlen;
        
  }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: