日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode76 最小覆盖子串

發布時間:2023/12/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode76 最小覆盖子串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給你一個字符串 S、一個字符串 T,請在字符串 S 里面找出:包含 T 所有字母的最小子串。

示例:

輸入: S = "ADOBECODEBANC", T = "ABC"
輸出: "BANC"
說明:

如果 S 中不存這樣的子串,則返回空字符串 ""。
如果 S 中存在這樣的子串,我們保證它是唯一的答案。

思路:雙指針,兩個指針中間代表一個字符串。

都往右邊走,滿足條件就左指針向右(縮),不滿足條件就右指針向右(擴)

public String minWindow(String s, String t) {int[] map = new int[128];// 遍歷字符串 t,初始化每個字母的次數for (int i = 0; i < t.length(); i++) {char char_i = t.charAt(i);map[char_i]++;}int left = 0; // 左指針int right = 0; // 右指針int ans_left = 0; // 保存最小窗口的左邊界int ans_right = -1; // 保存最小窗口的右邊界int ans_len = Integer.MAX_VALUE; // 當前最小窗口的長度int count = t.length();// 遍歷字符串 swhile (right < s.length()) {char char_right = s.charAt(right);// 當前的字母次數減一map[char_right]--;//代表當前符合了一個字母if (map[char_right] >= 0) {count--;}// 開始移動左指針,減小窗口while (count == 0) { // 如果當前窗口包含所有字母,就進入循環// 當前窗口大小int temp_len = right - left + 1;// 如果當前窗口更小,則更新相應變量if (temp_len < ans_len) {ans_left = left;ans_right = right;ans_len = temp_len;}// 得到左指針的字母char key = s.charAt(left);// 因為要把當前字母移除,所有相應次數要加 1map[key]++;//此時的 map[key] 大于 0 了,表示缺少當前字母了,count++if (map[key] > 0) {count++;}left++; // 左指針右移}// 右指針右移擴大窗口right++;}return s.substring(ans_left, ans_right + 1); }

總結

以上是生活随笔為你收集整理的leetcode76 最小覆盖子串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。