滑動視窗 無重複字元的最長子串

2021-10-01 05:53:41 字數 715 閱讀 1291

1.引入:

滑動視窗是陣列/字串問題中常用的抽象概念。

視窗通常是在陣列/字串中由開始和結束索引定義的一系列元素的集合,

即 [i, j)[i,j)(左閉,右開)。

而滑動視窗是可以將兩個邊界向某一方向「滑動」的視窗。

例如,我們將 [i, j)[i,j) 向右滑動 11 個元素,

則它將變為 [i+1, j+1)[i+1,j+1)(左閉,右開)。

2.**實現:

#include#include#include#include#includeusing namespace std;

string s;

int ans=0;

setss;

int main(){

cin>>s;

int len=s.length();

int i=0,j=0;

while(i3.複雜度分析:

a. 時間複雜度:o(2n) = o(n)o(2n)=o(n),在最糟糕的情況下,每個字元將被 ii 和 jj 訪問兩次。

b. 空間複雜度:o(min(m, n))o(min(m,n)),與之前的方法相同。

滑動視窗法需要 o(k)o(k) 的空間,其中 kk 表示 set 的大小。

而 set 的大小取決於字串 nn 的大小以及字符集 / 字母 mm 的大小。

無重複字元的最長子串(滑動視窗)

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。示例 1 輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。我們可以定義字元到索引的對映,而不是使用集合來判斷乙個字元是否存在。當我們找到重複的字元時,我們可以立即跳過該視窗。也就是說,如果 s...

無重複字元的最長子串(滑動視窗)

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。使用list的情況下可以儲存最長的字串什麼樣子,但是這道題不需要返回最長字串,所以list不好 class solution else retu...

3 無重複字元的最長子串(滑動視窗)

3.無重複字元的最長子串 給定乙個字串,請你找出其中不含有重複字元的最長子串的長度。示例 3 輸入 pwwkew 輸出 3 解釋 因為無重複字元的最長子串是 wke 所以其長度為 3。請注意,你的答案必須是 子串 的長度,pwke 是乙個子串行,不是子串。思路 如果遍歷所有子串並檢查子串中字元是否重...