zoukankan      html  css  js  c++  java
  • LeetCode 727. Minimum Window Subsequence

    原题链接在这里:https://leetcode.com/problems/minimum-window-subsequence/

    题目:

    Given strings S and T, find the minimum (contiguous) substring W of S, so that T is a subsequence of W.

    If there is no such window in S that covers all characters in T, return the empty string "". If there are multiple such minimum-length windows, return the one with the left-most starting index.

    Example 1:

    Input: 
    S = "abcdebdde", T = "bde"
    Output: "bcde"
    Explanation: 
    "bcde" is the answer because it occurs before "bdde" which has the same length.
    "deb" is not a smaller window because the elements of T in the window must occur in order.

    Note:

    • All the strings in the input will only contain lowercase letters.
    • The length of S will be in the range [1, 20000].
    • The length of T will be in the range [1, 100].

    题解:

    Having a pointer j pointing at T index, when S[i] == T[j], move j++.

    When j hits T.length(), then we find a substring candidate. Set a end to mark current position at S.

    We need to move i and j back, when j hits 0, now if S.substring(i+ 1, end) length is smaller than minLen, update minWin.

    Time Complexity: O(m*n). m = S.length(), n = T.length(). S = "aaaaaa", T = "aas", for each char in S, it is visited 2 * T.length() times.

    Space: O(1). 

    AC Java:

     1 class Solution {
     2     public String minWindow(String S, String T) {
     3         String minWin = "";
     4         int j = 0;
     5         int minLen = S.length() + 1;
     6         for(int i = 0; i < S.length(); i++){
     7             if(S.charAt(i) == T.charAt(j)){
     8                 j++;
     9             }
    10             
    11             if(j == T.length()){
    12                 int end = i + 1;
    13                 j--;
    14                 while(j >= 0){
    15                     if(T.charAt(j) == S.charAt(i)){
    16                         j--;
    17                     }
    18                     
    19                     i--;
    20                 }
    21                 
    22                 if(end - i + 1 < minLen){
    23                     minLen = end - i + 1;
    24                     minWin = S.substring(i + 1, end);
    25                 }
    26                 
    27                 j++;
    28                 i++;
    29             }
    30         }
    31         
    32         return minWin;
    33     }
    34 }

    类似Number of Longest Increasing SubsequenceMinimum Window Substring.

  • 相关阅读:
    新autoJS写淘宝福年种福果
    autoJS写淘宝福年种福果
    简七学理财知识
    python一键搭ftp服务器
    域名伪装
    [SWPU2019]Web1
    [网鼎杯 2020 朱雀组]phpweb
    Doc
    Docker简单使用教程
    MySQL数据库基本操作
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/12111493.html
Copyright © 2011-2022 走看看