簡介
在演算法的問題中,如果構造的儲存抽象為陣列,那麼有時會遇到一類問題:(最大長度、最小長度)的字串。
固定的滑動視窗,可以認為值乙個訊號量的區域性取樣:
演算法問題中,考慮的層次更為廣泛:有乙個大小可變的視窗,左右兩端方向一致向前滑動。
假設有陣列[a b c d e f g h]
乙個大小為3的滑動視窗在其上滑動,則有:
[a b c]
[b c d]
[c d e]
[d e f]
[e f g]
[f g h]
演算法思想
1.採用雙指標的技巧取樣區域性資料
2.先增加右邊界,如果子串行符合要求,再固定右邊界,調整左邊界,判斷是否符合要求
3.重複上述步驟,直到遍歷完畢
演算法模板
var template = function(s)
}
實戰演練--3.無重複字元的最長子串
給定乙個字串 s ,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: s = "abcabcbb"輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。
示例 2:
輸入: s = "bbbbb"輸出: 1
解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。
示例 3:
輸入: s = "pwwkew"0 <= s.length <= 5 * 104s 由英文本母、數字、符號和空格組成輸出: 3
解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。
/**
和* @param s
* @return
*/var lengthoflongestsubstring = function(s)
while(idx參考文獻
實戰演練--567.字串的排列
給你兩個字串s1
s2
,寫乙個函式來判斷s2
是否包含s1
的排列。如果是,返回true
;否則,返回false
。換句話說,
s1
的排列之一是s2
的 子串 。示例 1:輸入:s1 = "ab" s2 = "eidbaooo"
輸出:true
解釋:s2 包含 s1 的排列之一 ("ba").
示例 2:1 <= s1.length, s2.length <= 104s1 和 s2 僅包含小寫字母輸入:s1= "ab" s2 = "eidboaoo"
輸出:false
/**
* @param s1
* @param s2
* @return
*/var checkinclusion = function(s1, s2)
var cnt_s1 = new array(26).fill(0);
var cnt_s2 = new array(26).fill(0);
for(var i=0;i參考文獻
資料結構與演算法訓練營
學習過程 cliarifation 確定題目 possible solutions 盡可能的多思考解題方式 coding 多寫 test case 寫測試用例 讀題 思考 直接看解法,比較不同解法的優劣 背誦 默寫 自己寫多種解法比較 一天之後反覆練習 一周之後再練習 面試之前恢復訓練 資料結構分類...
演算法訓練營(六)雜湊表 對映 集合的實現與特性
目錄 精 面試解題思路 一 hash table 1.有效的字母異位詞 方法一方法二 2.字母異位詞分組 雜湊表 hash table 也叫雜湊表,是根據關鍵碼值 key value 而直接進行訪問的資料結構。它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫作雜湊函式 ...
vue訓練營4 vue中的diff演算法
原始碼分析1 diff的必要性,src core instance lifecycle.jslifecycle.js mountcomponent 元件中可能存在很多個 data 中的key使用 原始碼分析2 diff的執行方式,src core vdom patch.js patchvnode p...