您的位置:首页 > 其它

leetcode-Longest Substring Without Repeating Characters-3

2016-08-29 00:10 483 查看
找出字符串的最长不重复子串的长度

直观的做法是枚举以每个元素为开头的最长不重复子串,更新长度,时间复杂度是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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: