【第22期】观点:IT 行业加班,到底有没有价值?

leetcode-Longest Substring Without Repeating Characters-3

原创 2016年08月29日 00:10:16

找出字符串的最长不重复子串的长度
直观的做法是枚举以每个元素为开头的最长不重复子串,更新长度,时间复杂度是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;
    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

LeetCode【3】.Longest Substring Without Repeating Characters--算法图解及java实现

第三道题Longest Substring Without Repeating Characters如下:      public class Solution { public in...

Longest Substring Without Repeating Characters -- LeetCode

原题链接:<a target="_blank" href="http://oj.leetcode.com/problems/longest-substring-without-repeating-characters/" style="text...
  • bcyy
  • bcyy
  • 2014-02-26 01:53
  • 41

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

leetcode 3 Longest Substring Without Repeating Characters

Longest Substring Without Repeating Characters Given a string, find the length of the longest subst...

Longest Substring Without Repeating Characters

[size=24px;]Longest Substring Without Repeating Characters[/size] Given a string, find the length of the longest substring without repeating chara...

LeetCode OJ-3.Longest Substring Without Repeating Characters(最长无重复子串)

LeetCode OJ-3.Longest Substring Without Repeating Characters(最长无重复子串)题目描述 3. Longest Substring Wit...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)