码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode-003 Longest Substring Without Repeating Characters

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

标签:leetcode   算法   面试   

【题目】

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

标签:leetcode   算法   面试   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!