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;
    }

  • 相关阅读:
    红帽中出现”This system is not registered with RHN”的解决方案
    消息队列
    安装nmap
    工作后才知道
    虚拟空间测速
    Update 两个表之间数据更新 (转)
    破解
    一步步打造自己的代码生成器
    Table轻松实现报表 转载
    sql使用convert转化
  • 原文地址:https://www.cnblogs.com/huaiyinxiaojiang/p/6485142.html
Copyright © 2011-2022 走看看