76. Minimum Window Substring

最后更新

一刷
08-Jan-2017

昨天Amazon group面結束,剛回家。
國內以前喜歡的女生結婚了,嘿嘿...好開心呀~~

image

這次面試感覺自己的做法完爆別人,比什么2 greedy好多了= = 總之表現比想象的好,最后一面的面試官真是聰明得一逼,我的思路稍微說她就明白,跪了,這也太出色了。 我只能說A家對于背題黨直接OA拿VIDEO或者OFFER確實水,但是有實力的也有,比如給我面試的這個印度姐姐,屌屌屌。

總之希望自己能過能過。

開始準備Google吧。

言歸正傳。

一長一短2個String

在長的String里找最短的substring,使得substring包含所有短string的字符。
('a'在短字符串里出現2次,substring里也要出現2次才行)

2 pointers來做的,固定左邊,右邊往右找,直到substring滿足要求。 在往右的過程中,我們可能添加了很多不必要元素:
要滿足abc
我們在ab baba cba里找,找到C的時候,添加了baba這段沒用的,這個時候嘗試左邊縮進。

比較通過2個int[256],一個是需要的字符數,一個是現有的。

Time: O(n)
Space: O(1)

public class Solution {public String minWindow(String s, String t) {if (s.length() < t.length()) return "";int[] need = new int[256];int[] count = new int[256];for (char c : t.toCharArray()) {need[c]++;}int right = 0;String res = "";int minLength = Integer.MAX_VALUE;for (int left = 0; left < s.length(); left++) {while (right < s.length() && !contains(need, count)) {count[s.charAt(right++)] ++;}if (right - left < minLength && contains(need, count)) {minLength = right - left;res = s.substring(left, right);}count[s.charAt(left)] --;}return res;}public boolean contains(int[] need, int[] count) {for (int i = 0; i < 256; i++) {if (need[i] > count[i]) {return false;}}return true;}
}

方法二:

也是2 pointers,和一的做法差不多,唯一不同的就是判斷是否包含的方法。

方法一是通過比較int[256]來判斷是否包含所有character,這里有個別的方法。

比如短string是abcde,那么總共需要5個字符才能滿足。但也不是隨便5個字符就能滿足,只有某些字符才能滿足。
比如:
一開始是abcde,需要5個才能滿足,而a,b,c,d,e其中任何一個都是有效字符。
假如我們substring中已經有了a和c,需要bde,此時的有效字符就變成了b,d,e,讀到b,d,e才可以讓需要數字++

同理,縮進也要判斷,比如substring里有3個A,縮進最左邊縮小了1個A,那么當前需要的元素數量是不變的,因為我們還有2個A可以使用,相反如果縮掉了B,而我們substring里沒有B了,總共需要的元素數量就要++

if (--chars[s.charAt(right++)] >= 0) {validRead ++;}

這個說的是,substring讀取一個,然后判斷是否是有效讀取,把那些-- ++之類的給展開就一目了然了,后面的+ + --一樣 ,展開再看。

public class Solution {public String minWindow(String s, String t) {if (s.length() == 0 || s.length() < t.length()) return "";String res = "";int minLength = Integer.MAX_VALUE;int[] chars = new int[256];for (char c : t.toCharArray()) {chars[c] ++;}int need = t.length();int validRead = 0;int right = 0;for (int left = 0; left < s.length(); left ++) {while (right < s.length() && validRead < need) {if (--chars[s.charAt(right++)] >= 0) {validRead ++;}}if (validRead >= need && right - left < minLength) {minLength = right - left;res = s.substring(left, right);}if (++chars[s.charAt(left)] > 0) validRead --;   }return res;}
}

方法二是因為后面的題要用到這個辦法。

轉載于:https://www.cnblogs.com/reboot329/p/6263861.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394197.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394197.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394197.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

day 02 python 基礎

1.day1作業講解 題目答案見day1 2.格式化輸出 %占位符&#xff0c;s:字符串&#xff0c;d&#xff1a;數字 %%只是單純的顯示%&#xff08;顯示的%是后面的&#xff09; 1 #格式化輸出2 # % s d3 # name input(請輸入姓名)4 # age input(請輸入年齡)5 # height input(請輸入…

python多維數據劃分_【python+機器學習(4)】多維數據的特征選取(RidgeLasso)...

歡迎關注哈希大數據微信公眾號【哈希大數據】在之前我們介紹了直接使用線性回歸進行波士頓房價的預測&#xff0c;但是預測準確率僅有60%左右。預測準確率不高一方面是我們未對數據進行一定的預處理(包括歸一化和標準化等)&#xff0c;這樣不能確保在使用優化方式時&#xff0c…

leetcode64. 最小路徑和(dp)

給定一個包含非負整數的 m x n 網格&#xff0c;請找出一條從左上角到右下角的路徑&#xff0c;使得路徑上的數字總和為最小。說明&#xff1a;每次只能向下或者向右移動一步。示例:輸入: [[1,3,1],[1,5,1],[4,2,1] ] 輸出: 7 解釋: 因為路徑 1→3→1→1→1 的總和最小。代碼 …

mysql淺拷貝_深拷貝與淺拷貝

在Python中&#xff0c;對象賦值實際上是對象的引用。當創建一個對象&#xff0c;然后把它賦給另一個變量的時候&#xff0c;Python并沒有拷貝這個對象&#xff0c;而只是拷貝了這個對象的引用。1、淺拷貝&#xff1a;利用切片操作、工廠方法list方法拷貝2、深拷貝&#xff1a;…

盤州市“檢企聯合” 探索大數據應用新路

為認真貫徹落實“科技強檢”及推進大數據應用的決策部署&#xff0c;8月31日&#xff0c;盤州市人民檢察院組織召開以“檢察大數據”為主題的“兩長”座談會。市經信局、中國移動盤州分公司、中國電信盤州分公司等單位負責人&#xff0c;檢察院在家班子成員及院各部門主要負責人…

iOS中的顏色

最近在改Bug的時候&#xff0c;才注意到iOS 中的顏色竟然也大有文章&#xff0c;特來記錄一下。 先說一下問題&#xff0c;因為某界面中有用xib實現的一個view&#xff0c;而這個view 只在UIColletionView的layout 里通過nib 注冊使用&#xff0c;為這個xib設置了背景色&#x…

編程面試中需要了解的5件事

This article is intended for those who are trying to start their programming career, or are preparing to interview for their dream job. As someone who’s been on both sides of the interviewing table, I understand how it feels to be the interviewee.本文適用…

多線程的基礎知識

1、程序、進程、線程的基本概念 程序&#xff1a;為了完成某種任務用某一種語言編寫的一組指令的集合就叫程序。程序就是一段靜態的代碼。 進程&#xff1a;進程是程序的依次執行過程&#xff0c;或者說是正在運行的一個程序。這是一個動態的過程&#xff0c;有它自身的產生運行…

springboot實現單點登錄_什么是單點登錄,php是如何實現單點登錄的

文章來自&#xff1a;php中文網鏈接&#xff1a;https://www.php.cn/php-weizijiaocheng-429869.html作者&#xff1a;中文網商務合作:請加微信(QQ)&#xff1a;2230304070視頻教程分享碼農網&#xff1a;http://www.mano100.cn/rjyfk_url-url.html &#xff0c;升級終身會員即…

背景圖處理,這是個好東西記錄一下

背景圖處理 rgba &#xff08;&#xff09;&#xff0c;前3個是三原色&#xff0c;第四個參數是透明度轉載于:https://www.cnblogs.com/ChineseLiao/p/7479207.html

python使用GUI(圖形用戶界面)

打開后&#xff1a; File→New File(Ctrl N) 轉載于:https://www.cnblogs.com/ly123456/p/6269859.html

Altium Designer(AD24)新工程復用設計文件圖文教程及視頻演示

&#x1f3e1;《專欄目錄》 目錄 1&#xff0c;概述2&#xff0c;復用方法一視頻演示2.1&#xff0c;創建工程2.2&#xff0c;復用設計文件 3&#xff0c;復用方法二視頻演示4&#xff0c;總結 歡迎點擊瀏覽更多高清視頻演示 1&#xff0c;概述 本文簡述使用AD軟件復用設計文件…

兩點定標法_一種兩點校正紅外熱像儀的非均勻性的模塊及方法

一種兩點校正紅外熱像儀的非均勻性的模塊及方法【技術領域】[0001] 本發明屬于紅外熱成像系統的非均勻性校正領域&#xff0c;特別是一種兩點校正紅外熱像 儀的非均勻性的模塊及方法。【背景技術】[0002] 在過去的幾十年中&#xff0c;紅外探測器件的元數不斷增加&#xff0c;由…

leetcode851. 喧鬧和富有(dfs)

在一組 N 個人&#xff08;編號為 0, 1, 2, …, N-1&#xff09;中&#xff0c;每個人都有不同數目的錢&#xff0c;以及不同程度的安靜&#xff08;quietness&#xff09;。 為了方便起見&#xff0c;我們將編號為 x 的人簡稱為 "person x "。 如果能夠肯定 perso…

如何選擇正確的容器編排以及如何進行部署

by Michael Douglass邁克爾道格拉斯(Michael Douglass) 如何選擇正確的容器編排以及如何進行部署 (How to choose the right container orchestration and how to deploy it) Running server processes inside containers is here to stay. If your environment is small with…

Oracle 學習筆記(三)

oracle 表查詢 oracle 表基本查詢 在此&#xff0c;基于 scott 用戶存在的 emp&#xff0c;dept 表演示學習。 emp 雇員表 clerk 員工 salesman 銷售 manager 經理 analyst 分析師 president 總裁 mgr 上級的編號 hiredate 入職時間 sal 工資 comm 獎金 deptno 部…

html meta標簽使用總結(轉)

之前學習前端中&#xff0c;對meta標簽的了解僅僅只是這一句。 <meta charset"UTF-8"> 但是打開任意的網站&#xff0c;其head標簽內都有一列的meta標簽。比如我博客的。 但是自己卻很不熟悉&#xff0c;于是把meta標簽加入了寒假學習計劃的最前方。 簡介 在查…

bzoj 4009 接水果 整體二分

Description 先給出一些盤子, 用路徑x-y表示, 有權值 再有Q個詢問, 表示水果, 用路徑x-y表示 如果盤子是水果的子路徑, 可以接住 對于每個水果, 輸出可以接住它的盤子的第k小權 Solution 對于x-lca-y的盤子&#xff0c;水果一定一個在x子樹&#xff0c;一個在y子樹 對于x-lca的…

離散元 python_剛開始學習離散元軟件Yade,有什么建議?

用Yade-DEM 做過博士期間的部分工作&#xff0c;也是從毫無所知到算是入門&#xff0c;分享一點我的學習過程&#xff0c;為那些剛接觸Yade的同學提供些許參考&#xff0c;希望對大家有幫助。0. Yade 簡介Yade 是一個用于離散元分析的開源平臺&#xff0c;是法國Lab 3SR-Grenob…

leetcode529. 掃雷游戲(dfs)

讓我們一起來玩掃雷游戲&#xff01; 給定一個代表游戲板的二維字符矩陣。 ‘M’ 代表一個未挖出的地雷&#xff0c;‘E’ 代表一個未挖出的空方塊&#xff0c;‘B’ 代表沒有相鄰&#xff08;上&#xff0c;下&#xff0c;左&#xff0c;右&#xff0c;和所有4個對角線&#…