2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 ““。 如果有不
2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。
如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 “”。
如果有不止一个最短长度的窗口,返回开始位置最靠左的那个。
示例 1:
输入:
S = “abcdebdde”, T = “bde”
输出:“bcde”
解释:
“bcde” 是答案,因为它在相同长度的字符串 “bdde” 出现之前。
“deb” 不是一个更短的答案,因为在窗口中必须按顺序出现 T 中的元素。
答案2022-09-19:
动态规划。
时间复杂度:O(NM)。
空间复杂度:O(NM)。
代码用rust编写。代码如下:
fn main() {
let s = "xxaxxbxxcxxaxbyc";
let t = "abc";
let ans = min_window4(s, t);
println!("ans = {}", ans);
}
const MAX_VALUE: i32 = 1 << 31 - 1;
fn min_window4(s: &str, t: &str) -> String {
let str = s.as_bytes();
let target = t.as_bytes();
let n = str.len() as i32;
let m = target.len() as i32;
let mut dp: Vec<Vec<i32>> = vec![];
for i in 0..n + 1 {
dp.push(vec![]);
for _ in 0..m + 1 {
dp[i as usize].push(0);
}
}
for si in 0..=n {
dp[si as usize][m as usize] = si;
}
for ti in 0..m {
dp[n as usize][ti as usize] = MAX_VALUE;
}
let mut si = n - 1;
while si >= 0 {
let mut ti = m - 1;
while ti >= 0 {
let r1 = dp[(si + 1) as usize][ti as usize];
let r2 = if str[si as usize] == target[ti as usize] {
dp[(si + 1) as usize][(ti + 1) as usize]
} else {
MAX_VALUE
};
dp[si as usize][ti as usize] = get_min(r1, r2);
ti -= 1;
}
si -= 1;
}
let mut len = MAX_VALUE;
let mut l = -1;
let mut r = -1;
for si in 0..str.len() as i32 {
let right = dp[si as usize][0];
if right != MAX_VALUE && right - si < len {
len = dp[si as usize][0] - si;
l = si;
r = right;
}
}
return if l == -1 {
String::from("")
} else {
String::from(&s[l as usize..r as usize])
};
}
fn get_min<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
if a < b {
a
} else {
b
}
}
执行结果如下:
2022-09-19:给定字符串 S and T,找出 S 中最短的(连续)子串 W ,使得 T 是 W 的 子序列 。 如果 S 中没有窗口可以包含 T 中的所有字符,返回空字符串 ““。 如果有不的更多相关文章
- 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...
- ubuntu下file_get_contents返回空字符串
ubuntu下file_get_contents返回空字符串 | 浏览:302 | 更新:2014-03-30 10:11 本文起初面临的问题是PHP中SoapClient不好使,最后file_get ...
- 输入n个字符串,找出最长最短字符串(若有个数相同的,都打印出来)
首先,要求找到最长最短字符串,我们应该用数组将其存起来,输入的个数是不固定的,我们就可以用Scanner获取要输入的个数,最终找到的个数也不固定,我们可以封装两个方法,并且返回值类型为数组. 我遇到的 ...
- 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小. 源码如下: #include <iostream> #include <string.h> #incl ...
- 2018.3.12 Leecode习题 给定一个整数数列,找出其中和为特定值的那两个数。
给定一个整数数列,找出其中和为特定值的那两个数. 你可以假设每个输入都只会有一种答案,同样的元素不能被重用. 示例: 给定 nums = [2, 7, 11, 15], target = 9; 因为 ...
- 作业帮:给定一个整数数组,找出其中两个数相加等于目标值(去重set)
题目描述 给定一个整数数组,找出其中两个数相加等于目标值 输入 [1,3,5,7,9,11] 10 输出 1,9 3,7 代码: import java.util.HashMap; import ja ...
- python字符串面试题:找出一个字符串中第一个字母和最后一个字符是第一次重复,中间没有重复且最长的子串
1.给出任意一个字符串,打印一个最长子串字符串及其长度,如果有相同长度的子字符串,都要一起打印出来,该子字符串满足以下条件, 第一个字母和最后一个字符是第一次重复 这个子字符串的中间字母没有重复 这个 ...
- vue 之 后端返回空字符串用 null 和 “”以及 undefind 判断不到的问题
原文: <!-- <span v-if="scope.row.buyer_credit_score != '' || scope.row.buyer_credit_score ! ...
- 面试题:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。(c++实现)
实例说明 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ...
- 给定一个整数N,找出一个比N大且最接近N,但二进制权值与该整数相同 的数
1,问题描述 给定一个整数N,该整数的二进制权值定义如下:将该整数N转化成二进制表示法,其中 1 的个数即为它的二进制权值. 比如:十进制数1717 的二进制表示为:0000 0110 1011 01 ...
随机推荐
- virsh虚拟机使用网桥来实现上网
使用virsh-install安装虚拟机后,虚拟机不可以上网 第一步:主机上配置网桥 cp ifcfg-eno16777736 /tmp/ cp ifcfg-eno16777736 ifcfg ...
- JsonResult向前端返回值,报错500
1,问题原因 因为返回信息为json对象,我在controller方法所在的入口类上,添加的注解是:@Controller 而@Controller是不适合返回json内容的 2,解决方法 方法一:不 ...
- 【QCustomPlot】简介
说明 使用 QCustomPlot 绘图库辅助开发时整理的学习笔记. 目录 说明 1. 库简介 2. 库的官网链接 3. 库的帮助文档 4. 库的下载地址 5. 库的版本号说明 6. 库的 Git 地 ...
- Linux & 标准C语言学习 <DAY8_2>
一.函数 Function 一段具有某一项功能的代码集合,是C语言管理代码的最小单位 把代码封装成一个个函数,方便管理和调用函数 1.函数分类 标准库函数: ...
- Salesforce Javascript(四) 展开语法 ...
本篇参考: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Spread_syntax Sale ...
- Maven 自动化构建
一.Maven:是一款服务于 Java平台的自动化构建工具 [1]Maven可以将一个项目按模块划分成不同的工程,利于分工协作;[2]Maven可以将 jar包保存在自己的中央"仓库&quo ...
- Kali中python问题
Kali中python问题 1.查看python有哪些版本 update-alternatives --display python 2.如果没有,可以去/usr/bin查看kali自带哪些版本 查看 ...
- Python 霸榜的一周,又有什么新 AI 力作呢?「GitHub 热点速览」
GPT 带火了一波语言模型,LLaMA 和 Alpaca 也在持续发力.依旧是各类 GPT 后缀霸榜 GitHub trending 的一周,为此特推部分专门收录了两个比较不错的 GPT 应用.而作为 ...
- AcWing 1353. 滑雪场设计
原题链接 思路 本题如果以贪心的思路来理解,则会遇到如果根据贪心算法变更后的最高峰和最低峰会发生改变,产生后效性,导致贪心算法无效,再考虑到本题目数据量不大,山峰数量在1k以内,山峰高度在100之内, ...
- Redis的自增也能实现滑动窗口限流?
限流是大家开发之路上一定会遇到的需求.比如:限制一定时间内,接口请求请求频率:一定时间内用户发言.评论次数等等,类似于滑动窗口算法.这里分享一份拿来即用的代码,一起看看如何利用常见的 Redis 实现 ...