关闭

leetcode-Longest Substring Without Repeating Characters-3

146人阅读 评论(0) 收藏 举报
分类:

找出字符串的最长不重复子串的长度
直观的做法是枚举以每个元素为开头的最长不重复子串,更新长度,时间复杂度是ON^2,空间O1
更高效的做法:用一个hash表保存每个字符最后出现的下标,用一个指针i,表名当前最长不重复子串的首位置,遍历字符串,在hash表中找到当前字符最后一次出现的位置记为k,如果k>=i,说明当前字符在当前最长不重复子串中出现过了,那么更新i和hash[s[j]]。只需遍历一遍,时间复杂度是ON,空间O256(ascii字符其实只需128就够了)

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int i=0;
        int vis[300];
        for(int j=0;j<300;j++) vis[j]=-1;
        int ans=0;
        if(s.size()==0) return 0;
        if(s.size()==1) return 1;
        int len=s.size();
        for(int j=0;j<s.size();j++){
            if(vis[s[j]]>=i){
                ans=max(ans,j-i);
                cout<<i<<" "<<j<<" "<<j-i<<endl;
                i=vis[s[j]]+1;
            }
            vis[s[j]]=j;
        }
        ans=max(ans,len-i);
        return ans;
    }
};
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:103840次
    • 积分:3026
    • 等级:
    • 排名:第12067名
    • 原创:204篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    最新评论