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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Leetcode--76. 最小覆盖子串

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

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

示例:

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

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

提交的代碼:

class?Solution?{

????public?String?minWindow(String?s,?String?t)?{

??Map<Character,?Integer>?map?=?new?HashMap<>();

????????for?(char?c?:?s.toCharArray())?map.put(c,?0);?//初始化s的字符,全部為key-0

????????for?(char?c?:?t.toCharArray())?{

????????????if?(map.containsKey(c))?{

????????????????map.put(c,?map.get(c)?+?1);?//t中出現的字符數?key-int

????????????}?else?{

????????????????return?"";

????????????}

????????}

????????String?result?=?"";

????????//記錄需要被匹配的次數

????????int?count?=?t.length();

????????int?right?=?0;

????????int?left?=?0;

????????while?(right?<?s.length())?{

????????????char?c?=?s.charAt(right);

????????????//將字符進行匹配

????????????if?(map.get(c)?>?0)?{

????????????????count--;

????????????}

????????????map.put(c,?map.get(c)?-?1);

????????????right++;

????????????while?(count?==?0)?{

????????????????//替換最小結果

????????????????if(result.length()?==?0){

????????????????????result?=?s.substring(left,?right);

????????????????}else?if?(result.length()?>?(right?-?left))?{

????????????????????result?=?s.substring(left,?right);

????????????????}

????????????????//移動左指針

????????????????char?c1?=?s.charAt(left);

????????????????if?(map.get(c1)?==?0)?{? //是0說明是t中的字符,否則是負數

????????????????????count++;

????????????????}

????????????????map.put(c1,?map.get(c1)?+?1);

????????????????left++;

????????????}

????????}

????????return?result;

????}

}

總結

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

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