zoukankan      html  css  js  c++  java
  • LeetCode--Minimum Window Substring

    Given a string s ang string t, find the minmum window in s.

    For example:

    s = "ADOBENCODEBANC";

    t = "ABC";

    Minimum window is "BANC";

    t = "ABBC";

    Minimum window is "BENCODEBA";

    我的时间复杂度为O(n2),不是优秀的实现代码,但是也花了我很长时间,我还是想把代码贴出来

    思路:找到字符串中第一匹配的字符和最后一个匹配的字符,两者相减之后再加1就是要找的结果(作为哨兵),但这结果并不一定是最优的,还得继续得到下一次结果,然后比较两次结果取最短的,如此循环下去,每次匹配到t中的字符,我就将t中的这个字符删掉,当t的长度小于1时,从字符串中截出第一匹配的字符和最后一个匹配的字符。

    public static void main(String[] args) {
      String s = "ADOBENCODEBANC";
      String t = "ABBC";
      String result = s;
      for(int i = 0; i < s.length(); ++i){
        result = findMinSubstring(s.substring(i), t, result);
      }
      if(result.length() == s.length() && result != t){
      System.out.println("");
      }else{
        System.out.println(result);
      }
    }

    public static String findMinSubstring(String s, String t, String result) {
      StringBuffer sb = new StringBuffer(t);
      int firstNum = -1;
      int lastNum = -1;
      for(int i = 0; i < s.length(); ++i){
        if(t.contains(s.charAt(i)+"")){
          firstNum = i;
          break;
        }
      }
      for(int j = firstNum; j < s.length(); ++j){
        if(t.contains(s.charAt(j)+"")){
          lastNum = j;
          if(sb.toString().contains(s.charAt(j)+""))
          sb.deleteCharAt(sb.toString().indexOf(s.charAt(j)));
        }
        if(sb.length() < 1){
          return s.substring(firstNum, lastNum + 1).length() < result.length() ? s.substring(firstNum, lastNum + 1) : result;
        }
      }
      return result;
    }

  • 相关阅读:
    react之引用echarts
    vue之生命周期
    算法之冒泡排序
    算法之快速排序
    算法题之统计字符串中出现最多的字母
    使用http-proxy-middleware 代理跨域
    div产生的滚动条返回顶部
    Django实战(18):提交订单
    Django实战(17):ajax !
    Django实战(16):Django+jquery
  • 原文地址:https://www.cnblogs.com/huaiyinxiaojiang/p/6485142.html
Copyright © 2011-2022 走看看