技术标签: # LeetCode 字符串 滑动窗口 算法题
Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n).
Input: S = "ADOBECODEBANC", T = "ABC"
Output: "BANC"
""
./**
* <p>创建日期:2020-05-23 9:00</p>
*
* @author PengHao
*/
class Solution {
public String minWindow(String s, String t) {
char[] sArr = s.toCharArray();
Map<Character, Integer> window = new HashMap<>(t.length() >> 1);
Map<Character, Integer> tMap = new HashMap<>(t.length() >> 1);
// 初始化Map
for (char ch : t.toCharArray()) {
tMap.put(ch, tMap.getOrDefault(ch, 0) + 1);
}
// 滑动窗口中满足条件且不重复的字符个数
int numOfValidUnrepeatedCharInWindow = 0;
// 窗口边界,[left, right)
int left = 0, right = 0;
// 最小覆盖子串的起始索引和长度
int minLeft = 0, minLen = s.length() + 1;
// 扩大窗口
while (right < s.length()) {
// 进入窗口的字符,并右移窗口右边界
char enterChar = sArr[right++];
// 判断字符串t中是否有该字符
if (tMap.containsKey(enterChar)) {
// 如果有该字符,更新数据
// 窗口中该字符个数加1
window.put(enterChar, window.getOrDefault(enterChar, 0) + 1);
// 判断窗口中该字符的个数是否等于满足条件
if (window.get(enterChar).equals(tMap.get(enterChar))) {
// 满足条件,个数加1
numOfValidUnrepeatedCharInWindow++;
}
}
// 判断窗口是否满足缩小的条件
while (numOfValidUnrepeatedCharInWindow == tMap.size()) {
// 判断当前窗口长度是否小于最小长度
if (minLen > right - left) {
minLen = right - left;
minLeft = left;
}
// 移出窗口的字符,并右移窗口左边界
char outChar = sArr[left++];
// 判断窗口中是否有该字符
if (window.containsKey(outChar)) {
// 判断该字符个数是否刚好满足条件
if (window.get(outChar).equals(tMap.get(outChar))) {
// 不满足条件,个数减1
numOfValidUnrepeatedCharInWindow--;
}
// 字符个数减1
window.put(outChar, window.get(outChar) - 1);
}
}
}
return minLeft + minLen > s.length() ? "" : s.substring(minLeft, minLeft + minLen);
}
}
准备工作: aptana下载地址: http://update1.aptana.org/studio/3.2/024747/aptana_update_024747.zip 网页更新地址:http://update1.aptana.org/studio/3.2/024747/index.html 安装方法: 1. 在..\MyEclipse\MyEclipse 9\dropins目录下新建apta..._findbugs 3.02插件安装包
web.xml如下:<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.._classpath:springmvc-servlet.xml
一需求项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。可以使用 MyBatis Plus 的自动填充功能,完成这些字段的赋值工作。二 数据库CREATE TABLE `user` ( `id` bigint(20) NOT NULL DEFAULT '0' COMMENT '主键ID', `NAME` varchar(30) DEFAULT NULL COMMENT '姓名', `age` int(11) DEFAULT NULL COMM._mybatis 批量保存数据 自动填充id
nest 链接数据库失败_nestjs 配置localhost 作为数据库链接 连接不上
参考如下两篇文章:1.https://blog.csdn.net/stevenqian/article/details/76864832?utm_source=blogxgwz82.https://blog.csdn.net/housezhu/article/details/72229165两篇文章都是基于aosp7.1.2,但https://github.com/android-r..._树莓派移植aosp
学生实验报告课程名称:单片机原理与应用 专业班级:嵌入式14103班 __姓 名:_赵存档___________学 号:14160310317 2015--2016 学年第 1 学期..._蜂鸣器驱动实验误差原因分析
转载自:https://blog.csdn.net/weixin_43356770/article/details/99695422在桌面创建个文本文件,改名gpedit.bat然后把下面这一串复制进去@echo offpushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txtdir /b C:\Window_本组策略编辑器找不到
NB_CLT_7.6.0.4-tar_split.tar[[emailprotected] soft]# tar xvf NB_CLT_7.6.0.4-tar_split.tarNB_update.installVrtsNB_CLT_7.6.0.4.READMEVrtsNB_CLT_7.6.0.4.postinstallVrtsNB_CLT_7.6.0.4.postuninstallVrtsNB..._nbu client
参见英文答案 >Can I mix MySQL APIs in PHP?4个当我执行下面的PHP代码时,我得到致命错误,我不知道如何解决它.谢谢您的帮助错误PHP Fatal error: Uncaught Error: Call to undefined function mysql_query() in /Appli..._php 读取mysql call to undefined function mysql_query()
Hadoophadoop2的三大核心:HDFS、MapReduce、YARNhadoop2的四大模块:Hadoop Common 为其他模块提供基础设施Hadoop DFS 一个高可用、高吞吐量的分布式文件系统、Hadoop MapReduce 一个分布式的离线并行计算框架、Hadoop YARN 一个全新的MapReduce框架,任务调度和资源管理。(1)、namenote启动过...
内存空间的分配与回收,举个不太恰当的栗子如图书馆的书架,图书怎么存储容易访问,连续编址和非连续编址有什么区别......_回收内存的四种情况
存储过程实现将某一结果集插入到另一张表的俩种方法-- 一 ,case 1-- 新增存储过程之前先删除DROP PROCEDURE IF EXISTS tracking;-- 存储过程与其他sql的链接语句DELIMITER $$$$CREATE PROCEDURE `tracking`() -- 定义存储过程名BEGIN -- 开始 -- 需要定义接收游标数据的变量 DECLARE done int DEFAULT 0; -- 定义变量 D_存储过程结果放入新表中