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. 最小覆盖子串的全部內容,希望文章能夠幫你解決所遇到的問題。