76. 最小覆盖子串

深藏阁楼爱情的钟 2023-10-04 10:26 129阅读 0赞

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 ""

注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

  1. 输入:s = "ADOBECODEBANC", t = "ABC"
  2. 输出:"BANC"

示例 2:

  1. 输入:s = "a", t = "a"
  2. 输出:"a"

提示:

  • 1 <= s.length, t.length <= 105
  • st 由英文字母组成

进阶:你能设计一个在 o(n) 时间内解决此问题的算法吗?

  1. package Solution76;
  2. class Solutiontimeout {
  3. public String minWindow(String s, String t) {
  4. int tlen=t.length();
  5. int start = 0;
  6. int end = 0;
  7. int min = Integer.MAX_VALUE;
  8. for (int i = 0; i < s.length(); i++) {
  9. for (int j = i + tlen; j <= s.length(); j++) {
  10. // System.out.println(s.substring(i, j));
  11. if (contain(s.substring(i, j), t)) {
  12. if ((j - i) < min) {
  13. min = j - i;
  14. start = i;
  15. end = j;
  16. }
  17. }
  18. }
  19. }
  20. return s.substring(start, end);
  21. }
  22. public boolean contain(String s, String t) {
  23. for (int i = 0; i < t.length(); i++) {
  24. String temp = s.replaceFirst(t.substring(i, i + 1), "");
  25. if (temp.length() != s.length() - 1) {
  26. return false;
  27. }
  28. s = temp;
  29. }
  30. return true;
  31. }
  32. public static void main(String[] args) {
  33. Solutiontimeout sol = new Solutiontimeout();
  34. String s = "ADOBECODEBANC", t = "ABC";
  35. System.out.println(sol.minWindow(s, t));
  36. }
  37. }

超时

发表评论

表情:
评论列表 (有 0 条评论,129人围观)

还没有评论,来说两句吧...

相关阅读