国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

最長無重復字符子串

2019-11-08 03:01:16
字體:
來源:轉載
供稿:網友

對于一個字符串,請設計一個高效算法,找到字符串的最長無重復字符的子串長度。 給定一個字符串A及它的長度n,請返回它的最長無重復字符子串長度。保證A中字符全部為小寫英文字符,且長度小于等于500。 測試樣例: “aabcb”,5 返回:3

有點類似動態規劃,但是比動態規劃簡單很多,首先利用一個vec記錄每個元素位置對應的最長無重復子串,利用map記錄每個字符出現的位置,對于一個新的元素位置,如果之前的map中沒有記錄那么最長子串就是前一個最長字符子串的長度加1,如果有記錄,看記錄的位置,如果記錄的位置在前一個字符最長子串的范圍內,則最長子串就是記錄位置和當前元素位置之間的元素,如果記錄的位置在前一個字符最長子串范圍外,那么最長子串就是前一個字符最長子串的長度加1。最后更新字符的記錄位置。循環進行處理即可。 代碼如下。

class DistinctSubstring {public: int longestSubstring(string A, int n) { if(n<=0) return 0; vector<int> vec(n,0); vec[0]=1; map<char,int> mymap; mymap[A[0]]=0; for(int i=1;i!=n;++i) { if(mymap.find(A[i])==mymap.end()) { mymap[A[i]]=i; vec[i]=vec[i-1]+1; } else { int temp=mymap[A[i]]; if(temp>=i-vec[i-1]) vec[i]=i-temp; else vec[i]=vec[i-1]+1; mymap[A[i]]=i; } } int max=INT_MIN; for(auto c:vec) { if(c>max) max=c; } return max; }};
上一篇:LeetCode: same-tree

下一篇:字符串的反轉

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪江市| 鄯善县| 澳门| 东台市| 怀远县| 嫩江县| 洪洞县| 宝兴县| 同江市| 浦县| 米脂县| 焉耆| 民县| 赤峰市| 阿巴嘎旗| 东山县| 丽水市| 新民市| 抚宁县| 浪卡子县| 杂多县| 团风县| 卢龙县| 井冈山市| 威远县| 巴林左旗| 淮南市| 安义县| 虹口区| 扶沟县| 靖边县| 洱源县| 鄯善县| 阳东县| 宁乡县| 清河县| 珠海市| 湾仔区| 本溪市| 元氏县| 花垣县|