Minimum Window Substring

本文介绍了一种在字符串S中寻找包含字符串T所有字符的最短子串的算法,复杂度为O(n)。通过具体实例说明了如何实现这一算法,并提供了一个Java代码示例。

Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).

For example,
S = "ADOBECODEBANC"
T = "ABC"

Minimum window is "BANC".

 1 public class Solution {
 2     public String minWindow(String S, String T) {
 3         int sLen = S.length();
 4         int tLen = T.length();
 5         if(sLen==0 || sLen<tLen) return"";
 6         int [] ex = new int[256];
 7         int [] app = new int [256];
 8         for(int i=0;i<tLen;i++){
 9             ex[T.charAt(i)]++;
10         }
11         int min = Integer.MAX_VALUE;
12         int minStart = 0;
13         int winStart = 0;
14         int appNum = 0;
15         for(int winEnd=0;winEnd<sLen;winEnd++){
16             if(ex[S.charAt(winEnd)]>0){
17                 app[S.charAt(winEnd)]++;
18                 if(app[S.charAt(winEnd)]<=ex[S.charAt(winEnd)]){
19                     appNum++;
20                 }
21             }
22             if(appNum==tLen){
23                 while(app[S.charAt(winStart)]>ex[S.charAt(winStart)]||ex[S.charAt(winStart)]==0){
24                     app[S.charAt(winStart)]--;
25                     winStart++;
26                 }
27                 if(min>winEnd-winStart+1){
28                     min = winEnd-winStart+1;
29                     minStart = winStart;
30                 }
31             }
32         }
33         if(min == Integer.MAX_VALUE)return "";
34         return S.substring(minStart,minStart+min);
35 
36     }
37 }
View Code

while(ex[S.charAt(winStart)]==0||app[S.charAt(winStart)]>ex[S.charAt(winStart)]){
app[S.charAt(winStart)]--;
winStart++;
}

if(min==Integer.MAX_VALUE) return "";

转载于:https://www.cnblogs.com/krunning/p/3545274.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值