leetcode /longest substring without repeating characters
class solution {
public:
int lengthoflongestsubstring(string s) {
int b=0,rele=0,i=0; /*b:back_mark,i:front_mark*/
vectorhasht(256 ,-1);/*use ascii as hash table*/
for(int i=0;ihashtable 記錄著前端掃過之後每種char對應的編號,
b=max(b,hasht[s[i]]+1); 代表著尾端的變化
尾端只會單向移動(向右)。
每次掃到乙個前端字元的時候,尾端總會更新到前乙個此字元的後一位,保證了兩個標記之間沒有重複元素。
動態規劃很常見,也很簡單,但是hash表在此題中的應用可以稱得上是十分巧妙,直接從o(n^2)降到o(n),hashtable在記錄重複元素、更新重複元素方面作用比較大,以後可以多多注意這方面,不要再用queue或者deque這種高度不動腦的表達了。
最長不重複子序列
其實是一道典型的雙指標問題,只要一直往後去輸入資料,如果遇到重複的資料,就讓begin指標往後移,直到重複的元素不再子串行內,在讀入新資料就可以了,每次遇到重複資料就把maxlength和當前的length比較去大值,就可以了 include include include include incl...
最長連續不重複子序列
給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。第一行包含整數n。第二行包含n個整數 均在0 100000範圍內 表示整數序列。共一行,包含乙個整數,表示最長的不包含重複數字的連續子串行的長度。1 n 100000 51 2 2 3 5 暴力 for int i 0 ...
最長連續不重複子序列
核心思路 遍歷陣列a中的每乙個元素a i 對於每乙個i,找到j使得雙指標 j,i 維護的是以a i 結尾的最長連續不重複子序列,長度為i j 1,將這一長度與result的較大者更新給result。對於每乙個i,如何確定j的位置 由於 j,i 1 是前一步得到的最長連續不重複子序列,所以如果 j,i...