網易面試題 最多有k個不同字元的最長子字串

2021-10-24 07:32:53 字數 696 閱讀 9915

給定字串s,找到最多有k個不同字元的最長子串t。

輸入: s = "eceba" 並且 k = 3

輸出: 4

解釋: t = "eceb"

輸入: s = "world" 並且 k = 4

輸出: 4

解釋: t = "worl" 或 "orld"

通過使用同向雙指標的演算法,我們可以做到一次遍歷字串就得到答案。 在字串上移動滑動視窗,保證視窗內有不超過 k 個不同字元,同時在每一步更新最大子串長度。

public class solution 

int left = 0, right = 0, cnt = 0;

int charset = new int[256];

int ans = 0;

while (right < s.length())

charset[s.charat(right)]++;

right++;

// 向右移動left,保持視窗內只有k種不同的字元

while (cnt > k)

left++;

}// 更新答案

ans = math.max(ans, right - left);

}return ans;

}}

更多題解參考

面試題30 最小的k個數

題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4.思路1,同29題一樣,利用快排思想,醉倒第k大的數,它左邊都比它小即可。o n 2,適合海量資料,利用堆資料結果,取數o 1 刪除和插入需要o k 總共n個數,時間複雜度o ...

面試題30 最小的k個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。思路1 按遞增排序,然後輸出前k個數,簡單粗暴,時間複雜度o nlogn 思路2 利用partition演算法,找到第k大數,輸出其左邊k個數,時間複雜度o n 思路3 開乙個規模...

面試題30 最小的k個數

1.輸入n個整數,找出其中的最小的k個數,例如輸入4,5,1,6,2,7,3,8 這8個數字,則其中最小的4個數字是1,2,3,4,分析 方法一,可以採用類似快速排序的解法,基於陣列中第k個數來進行調整,使得比第k個數字大的所有數字都在陣列的右邊,小的都在第k個數字的左邊。方法二 可以建立乙個大小為...