关闭

leetoj Longest Substring Without Repeating Characters

标签: leetcode面试mapvector
205人阅读 评论(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来不断的更新最长长度可以得出结果

class Solution 
{
public:
    int lengthOfLongestSubstring(string s) 
    {
        int length=0;
        int begin=0;
        vector<int> vec(256,-1);
        for(int i=0;i<s.size();i++)
        {
            begin=max(begin,vec[s[i]]+1);//表示的是之前元素和现在正在访问的相同元素的起点的位置
            vec[s[i]]=i;//更新位置
            length=max(length,i-begin+1); 
        }      
        return length;
    }
};

下面是使用map来实现的

class Solution 
{
public:
    int lengthOfLongestSubstring(string s) 
    {
        int length=0;
        int begin=0;
        int pre=-1;
        map<char,int> ma;
        map<char,int>::iterator it;
        for(int i=0;i<s.size();i++)
        {
            it=ma.find(s[i]);
            if(it!=ma.end())
            {
                pre=it->second;
            }
            else
            {
                pre=-1;
            }
            begin=max(begin,pre+1);//表示的是之前元素和现在正在访问的相同元素的起点的位置
            ma[s[i]]=i;//更新位置
            length=max(length,i-begin+1); 
        }
        return length;
    }
};
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:54974次
    • 积分:1655
    • 等级:
    • 排名:千里之外
    • 原创:110篇
    • 转载:26篇
    • 译文:0篇
    • 评论:2条
    最新评论