首页 > 编程语言 >最小覆盖子串(java)

最小覆盖子串(java)

时间:2024-11-25 23:06:33浏览次数:6  
标签:子串 ch java indexOf list 最小 flag 字符串

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

注意:

  • 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
  • 如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。

示例 2:

输入:s = "a", t = "a"
输出:"a"
解释:整个字符串 s 是最小覆盖子串。

示例 3:

输入: s = "a", t = "aa"
输出: ""
解释: t 中两个字符 'a' 均应包含在 s 的子串中,
因此没有符合条件的子字符串,返回空字符串。

 代码思路:-----时间超时,有无大佬可以帮我看看

class Solution {
    public String minWindow(String s, String t) {
        if (s.length() < t.length()) {
            return "";
        }
        if (s.indexOf(t) != -1) {
            return t;
        }
        char ch;
        int minsub = 0;
        String sub = "";
        boolean flag = true;//第一次找到子串
        boolean flag_x = true;
        int next_i = 0;
        int j;
        for (int i = 0; i < s.length(); ) {
            ch = s.charAt(i);
            if (t.indexOf(ch) != -1) {
                List list = new ArrayList();
                for (int m = 0; m < t.length(); m++) {
                    list.add(t.charAt(m));
                }
                j = i + 1;
                list.remove(list.indexOf(ch));
                while (j < s.length() && list.size() != 0) {
                    ch = s.charAt(j);
                    if (list.indexOf(ch) != -1) {
                        list.remove(list.indexOf(ch));
                    }
                    if (flag_x && t.indexOf(ch) != -1) {
                        next_i = j;
                        flag_x = false;
                    }
                    j++;
                }
                if (list.size() == 0) {
                    if (flag) {//第一次找到子串
                        sub = s.substring(i, j);
                        minsub = j - i;
                        flag = false;
                    }
                    if (minsub > j - i) {
                        minsub = j - i;
                        sub = s.substring(i, j);
                    }
                } else {
                    break;
                }
            }else {
                i++;
            }
            if (!flag_x) {
                i = next_i;
                flag_x = true;
            }
        }
        return sub;
    }
}

标签:子串,ch,java,indexOf,list,最小,flag,字符串
From: https://blog.csdn.net/qq_45452617/article/details/144042818

相关文章

  • 读《Effective Java》笔记 - 条目8
    条目8:避免使用终结方法和清理方法什么是终结方法(finalizer)和清理方法(cleaner)?终结方法(finalizer):是Object类的一个方法:protectedvoidfinalize(),可以由子类重写。(Java9开始已经弃用,但是Java类库仍在使用)它在垃圾收集器(GarbageCollector)将对象回收之前调用,用来释放资......
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现七
    一、前言介绍:免费学习:猿来入此1.1项目摘要主要源于互联网技术的快速发展和电子商务的普及。随着网络技术的不断进步,人们越来越依赖于互联网进行购物、交易和沟通。电子商务的兴起为在线拍卖提供了广阔的市场和便利的条件。在线拍卖系统通过搭建一个虚拟的拍卖平台,将传统......
  • 基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现八
    一、前言介绍:免费学习:猿来入此1.1项目摘要主要源于互联网技术的快速发展和电子商务的普及。随着网络技术的不断进步,人们越来越依赖于互联网进行购物、交易和沟通。电子商务的兴起为在线拍卖提供了广阔的市场和便利的条件。在线拍卖系统通过搭建一个虚拟的拍卖平台,将传统......
  • Fail-Fast与Fail-Safe:深入理解Java中的这两种机制
    Fail-Fast与Fail-Safe:深入理解Java中的这两种机制在Java编程中,我们经常遇到“fail-fast”和“fail-safe”这两个术语,尤其是在处理多线程和集合框架时。但很多开发者可能并不完全清楚它们的具体含义和应用场景。本文将深入探讨这两种机制,帮助你更好地理解它们的工作原理以及......
  • Java学习-9
    一、字符串转字符在Java中,可以通过 String 类的 charAt(intindex) 方法将字符串转换为字符。这个方法返回指定索引位置的字符,索引从0开始。示例代码:importjava.util.Scanner;publicclassStringToCharExample{publicstaticvoidmain(String[]args){Scann......
  • C++子串计算
    内存限制:64MB时间限制:1.000S题目描述给出一个只包含0和1的字符串(长度在1到100之间),求其每一个子串出现的次数。输入一行,一个01字符串。输出对所有出现次数在1次以上的子串,输出该子串及出现次数,中间用单个空格隔开。按子串的字典序从小到大依次输出,每行一个。样例输入......
  • 【力扣热题100】[Java版] 刷题笔记-448. 找到所有数组中消失的数字
    题目:448.找到所有数组中消失的数字给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1,n] 内。请你找出所有在 [1,n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。解题思路依据题目,有两种解题方式:第一种是暴力破解,直接创建一个1到n......
  • Java成员特点与接口的各种关系 牛顿迭代法计算平方根
    1.(1)importjava.util.Scanner;publicclasstest{publicstaticvoidmain(String[]args){irrl=newirr();l.method();Scannersc=newScanner(System.in);sc.next();}}(2)publicinterfaceinter{//默认在int前加......
  • 创建者模式-单例模式(java)
    1.单例设计模式单例模式(SingletonPattern)属于创建型模式,它提供了一种创建对象的最佳方式。单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。2.单例模式的实现饿汉式:类加载的时候创建对象懒汉式:首次使用的时候创建对象3.饿汉......
  • JavaWeb——SpringBoot原理
    10.1.配置优先级10.1.1.配置文件properties>yml(推荐)>yaml10.1.2.Java系统属性、命令行参数命令行参数>Java系统属性>配置文件10.2.Bean管理10.2.1.手动获取beanApplicationContext,IOC容器对象10.2.2.bean作用域10.2.3.第三方bean自定义的......