源**:
源**:
#include
#include
#include
using
namespace std;
string s, t;
//s是開始串, t為目標串
int l, r;
//雙指標
vector<
int> ans;
map<
char
,int
> need;
//記錄目標串的字母出現的個數
map<
char
,int
> window;
//記錄開始串的字母出現的個數
源**:
#include
#include
#include
using
namespace std;
string s, t;
//存入開始串 和 目標串:字母一定各不相同
int start, mi =
1<<30;
//start記錄最終串的最左邊, mi是最終串的長度
string ans;
int match;
//表示匹配的字母的個數
map<
char
,int
> need;
//記錄目標串的每個字元的個數
map<
char
,int
> window;
//記錄開始串的每個字元的個數 window在這裡就是滑動視窗
int l, r;
//雙指標
intmain()
for(
int i =
0; i < t.
length()
; i++
)while
(r < s.
length()
&& l <= r)
} r++
;//滿足條件的情況下,找出最優解 使l++;
while
(match == need.
size()
)if(need.
count
(s[l]))
window[s[l]]--
;}l++;}
} ans =
((mi ==
1<<30)
?"": s.
substr
(start, mi));
cout << ans <
return0;
}/*adobecodebanc
abc*/
滑動視窗演算法 演算法 滑動視窗 二
演算法 這算是滑動視窗的另外乙個典型題目,在資料量比較少的時候,可以直接採用暴力法解決 不過資料量比較大的時候,我們就需要想辦法解決視窗裡面最大值的思路,這裡我們採用雙端佇列queue來實現,借助 queue來儲存前面計算過的最大值資訊。題目 解法1 暴力解法 按照 視窗大小,從頭到尾依次遍歷,將每...
演算法 滑動視窗
一.滑動視窗 滑動視窗其實就是高階版的雙指標技巧,只不過它依靠了資料結構 hashmap,hashset 的幫助,使得雙指標運用起來更加的靈活,更加的方便,他主要就是來解決子字串匹配問題。他主要的思路就是這樣的固定步驟 1 我們在字串 s 中使用雙指標中的左右指標技巧,初始化 left right ...
演算法 滑動視窗
最多可以將k個值從0變成1,因此滑動視窗的限制條件 0的數量 zeros 小於k,演算法過程如下 有乙個滑動視窗 slipper 每次都會從a中讀入乙個數 當讀入的數為0時,zeros 當zeros的數量大於k時,會取出slipper首部的元素,當取值為0時zeros 總體 如下 上述演算法效率並不...