首页 > 其他 > 详细

LeetCode-003 Longest Substring Without Repeating Characters

时间:2014-05-15 14:39:52      阅读:377      评论:0      收藏:0      [点我收藏+]

【题目】

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个ASCII码,所以建一个256长度的布尔数组isExisted[256]即可
    方法:
    1. 使用两个指针p1, p2, 初始时都指向字符串头
    2. p2指针不断向后扫描,没有出现过的字符都要在isExisted[256]标记,直到遇到已经出现过的字符停止,比如我们用X表示
    3. 计算此时子串长度p2-p1;
    4. p1向后扫描,直到指向X为止,扫描过程中,将所有字符都标记为false,即还没出现过。
    5. p1指向X的后一个字符
    6. 重复2,3,4,5直到p2扫完字符串


【代码】

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.length()==0)return 0;
        int p1=0, p2=0;
        int maxlen=0;
        bool isExisted[256];
        memset(isExisted, false, 256);
        while(p2<s.length()){
            if(isExisted[s[p2]]){
                maxlen=max(p2-p1, maxlen);
                while(p1<p2&&s[p1]!=s[p2]){
                    isExisted[s[p1]]=false;
                    p1++;
                }
                isExisted[s[p1]]=false;
                p1++;
            }
            else{
                isExisted[s[p2]]=true;
                p2++;
            }
        }
        maxlen=max(p2-p1, maxlen);  //别漏了最后一个子串
        return maxlen;
    }
};


LeetCode-003 Longest Substring Without Repeating Characters,布布扣,bubuko.com

LeetCode-003 Longest Substring Without Repeating Characters

原文:http://blog.csdn.net/harryhuang1990/article/details/25719531

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!