Java 中的最小窗口子串10 Sept 2024 | 4 分钟阅读 给定两个字符串 S1 和 S2。我们的任务是找到一个子串 str,使得 S2 是 str 的子序列。如果存在多个有效子串,则考虑最小长度的子串。如果存在多个相同长度的有效子串,则可以考虑 S1 字符串中的任何一个有效子串。子序列是指从另一个序列中删除零个或多个元素而不改变顺序而派生的序列。 示例 1 输入 S1 = "JavaTpoint" S2 = "Tin" 输出: 有效的子串是 "Tpoin"。 解释: 字符串 "Tpoin" 包含字符串 "Tin" 的所有字母。 示例 2 输入 S1 = "qwertyiop" S2 = "tip" 输出: 有效的子串是 "tyiop"。 解释: 字符串 "Tpoin" 包含字符串 "Tin" 的所有字母。 方法: 双指针首先,我们将寻找一个窗口,该窗口实际包含完整的字符串 S2。然后,我们尝试尽可能地缩小窗口,同时记住窗口必须包含 S2 的所有字符。然后,我们可以返回该窗口。 以下是查找最小窗口子序列的步骤: 维护两个指针 ptr1 和 ptr2,并将它们的值初始化为 0。Ptr1 用于字符串 S1,Ptr2 用于字符串 S2。 当 S1[ptr1] == S2[ptr2] 时,两个指针同时移动;否则,只移动 ptr1 指针。 当 ptr2 的值等于字符串 S2 的长度时,表示在字符串 S1 中找到了字符串 S2。现在,我们需要减小窗口的大小。在减小窗口大小之前,了解为什么会出现不需要的字符很重要。 例如,让我们考虑以下字符串,其中 S1 = "ypcdepdde",S2 = "pde"。 最初,ptr1 和 ptr2 分别指向各自字符串的 0 索引。在 0 索引处,不匹配 (y != p),因此我们将 ptr1 指针向前移动一步。现在,我们同时移动 ptr1 和 ptr2 指针一步。现在,c 与 d 进行比较,这是不匹配的。因此,ptr1 增加一步。现在我们看到了匹配,两个指针同时向前移动。在字符串 S1 的第 4 个索引处,ptr2 变为三,这是字符串 S2 的长度。因此,我们得到一个大小为 5 的窗口。现在,当我们从右到左开始遍历窗口中的元素时,当出现匹配时,我们将 pt2 减 1。ptr2 变为 0 的索引是放置边界的位置。边界之外的任何内容都是不需要的字符。 所以,之前我们得到的窗口是 "ypcde",缩小后得到 "pcde"。因此,字符 'y' 是不需要的。 对于字符串 S1 的其余部分,可以重复相同的过程。 文件名: MinWindowSubsequence.java 输出 For the strings "JavaTpoint" and "Tin" The minimum window is : Tpoin For the strings "ypcdepdde" and "pde" The minimum window is : pcde For the strings "qwertyiop" and "tip" The minimum window is : tyiop 复杂度分析: 由于存在嵌套循环(一个 for 循环,另一个 while 循环),因此程序的时间复杂度为 O(n2),其中 n 是字符串中的总字符数。程序不使用额外的空间,因此空间复杂度为 O(1)。 下一个主题等比数列的 Nth 项 (Java) |
? 在 Java 中,static 是一个关键字,可以用于变量、类、块和方法。当我们使用 static 关键字放在它们前面时,意味着指定的成员本身属于该类型。换句话说,static 成员的一个实例是...
阅读 3 分钟
图像处理是计算机视觉和数字图像分析的关键方面,涉及对数字图像进行操作和分析以提取有用信息或提高其质量。Java 凭借其强大的库和多功能性,提供了出色的图像处理工具。在本节中,...
阅读 6 分钟
在本教程中,我们将讨论如何在 Java 中计算最大和,使得没有两个元素是相邻的。输入是一个填充了正数的数组 (inptArr[])。示例 1:输入 int inptArr[] = {15, 15, 110, 1100, 110, 15, 7, 80} 输出 1210 解释:...
阅读 8 分钟
在本节中,我们将学习什么是弹跳数,并创建 Java 程序来检查给定的数字是否为弹跳数。弹跳数程序经常在 Java 编码测试和学术界中被问到。在理解弹跳数之前,首先我们将理解什么...
阅读 4 分钟
问题陈述:我们给出了三个字符串 str1、str2、str3。我们需要找到出现在三个给定字符串中顺序相同但不一定连续的最长公共子序列。两个或多个字符串的公共子序列是公共的子序列……
阅读 6 分钟
给定一个整数数组 a[] 和一个正整数 k,我们的任务是计算所有差值为 k 的不同对。示例 1:输入:int a[] = {1, 6, 7, 9, 3, 2, 8, 10} int k = 1 输出:差值为...的对的总数
14 分钟阅读
? 在 Java 中,字符串分割是一项重要且常用的操作。Java 提供了多种分割字符串的方法。但最常见的方法是使用 String 类的 split() 方法。在本节中,我们将学习如何分割一个...
阅读9分钟
在 Java 中将两个字符串相乘涉及将表示数字的字符串转换为整数值,执行乘法,然后将结果转换回字符串。当处理超出 int 等基本数据类型范围的非常大的数字时,这种方法特别有用...
阅读9分钟
交通信号灯系统作为一种标准机制,与行人活动一起引导交通流,以在交叉路口维持道路安全和秩序。该系统使用不同的信号,通过改变颜色模式(包括红色、黄色和绿色)来向驾驶员传递指示。在本节中,...
5 分钟阅读
Java 21 中引入的 switch 表达式和语句的模式匹配功能允许开发人员在 switch 语句中匹配特定模式,使代码更简洁、更易读。要使用 switch 语句中的模式匹配,我们只需使用 case 关键字后跟...
阅读9分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India