文章目錄
- 1、長度最小的子數組
- 1.1 題目鏈接
- 1.2 題目描述
- 1.3 解題代碼
- 1.4 解題思路
- 2、無重復字符的最長子串
- 2.1 題目鏈接
- 2.2 題目描述
- 2.3 解題代碼
- 2.4 解題思路
- 3、串聯所有單詞的子串
- 3.1 題目鏈接
- 3.2 題目描述
- 3.3 解題代碼
- 3.4 解題思路
- 4、最小覆蓋子串
- 4.1 題目鏈接
- 4.2 題目描述
- 4.3 解題代碼
- 4.4 解題思路
1、長度最小的子數組
1.1 題目鏈接
點擊跳轉到題目位置
1.2 題目描述
給定一個含有 n 個正整數的數組和一個正整數 target 。
找出該數組中滿足其總和大于等于 target 的長度最小的
子數組
[numsl, numsl+1, …, numsr-1, numsr] ,并返回其長度。如果不存在符合條件的子數組,返回 0 。
提示:
1 <= target <= 109
1 <= nums.length <= 105
1 <= nums[i] <= 104
1.3 解題代碼
class Solution {public int minSubArrayLen(int target, int[] nums) {int left = 0;int right = -1;int n = nums.length;int sum = 0;int min_len = n + 1;while(right < n - 1){++right;sum += nums[right];while(sum >= target){min_len = Math.min(min_len, right - left + 1);sum -= nums[left];left++;} }if(min_len == n + 1){return 0;}return min_len;}
}
1.4 解題思路
- 使用滑動窗口解決問題。
- 滑動窗口向右移動,右指針移動,總和增加的,一旦總和大于等于目標值,左指針開始移動,每次移動前都更新一下長度,然后更新sum值(減少),直到sun值小于target后重新開始移動右指針。
2、無重復字符的最長子串
2.1 題目鏈接
點擊跳轉到題目位置
2.2 題目描述
給定一個字符串 s ,請你找出其中不含有重復字符的 最長子串 的長度。
提示:
- 0 <= s.length <= 5 * 104
- s 由英文字母、數字、符號和空格組成
2.3 解題代碼
class Solution {public int lengthOfLongestSubstring(String s) {int left = 0;int right = -1;int n = s.length();int len = 0;Set<Character> hash = new HashSet<Character>();while(right < n - 1){++right;char ch = s.charAt(right);if(!hash.contains(ch)){hash.add(ch);} else{while(hash.contains(ch)){hash.remove(s.charAt(left));++left;}hash.add(ch);}len = Math.max(len, right - left + 1);}return len;}
}
2.4 解題思路
- 滑動窗口解決該問題。
- 右指針右移,如果當前所指的字符不在集合里面,直接把該字符添加進字符中;如果當前所指的字符在集合里面,去除左指針所指的字符,并右移動,直到右指針所指的字符在集合中查詢不到,最后再將右指針所指的字符添加進去。
- 再上述操作執行完畢后更新一下最長的長度。
3、串聯所有單詞的子串
3.1 題目鏈接
點擊跳轉到題目位置
3.2 題目描述
給定一個字符串 s 和一個字符串數組 words。 words 中所有字符串 長度相同。
-
s 中的 串聯子串 是指一個包含 words 中所有字符串以任意順序排列連接起來的子串。
-
例如,如果 words = [“ab”,“cd”,“ef”], 那么 “abcdef”, “abefcd”,“cdabef”, “cdefab”,“efabcd”, 和 - “efcdab” 都是串聯子串。 “acdbef” 不是串聯子串,因為他不是任何 words 排列的連接。
返回所有串聯子串在 s 中的開始索引。你可以以 任意順序 返回答案。
提示:
- 1 <= s.length <= 104
- 1 <= words.length <= 5000
- 1 <= words[i].length <= 30
- words[i] 和 s 由小寫英文字母組成
3.3 解題代碼
3.4 解題思路
4、最小覆蓋子串
4.1 題目鏈接
點擊跳轉到題目位置
4.2 題目描述
給你一個字符串 s 、一個字符串 t 。返回 s 中涵蓋 t 所有字符的最小子串。如果 s 中不存在涵蓋 t 所有字符的子串,則返回空字符串 “” 。
4.3 解題代碼
在這里插入代碼片
4.4 解題思路
。