Java 程序最大化包含至少一个元音和一个辅音的子字符串的数量2025年1月7日 | 5 分钟阅读 许多与字符串相关的难题中,一个引人入胜的挑战是查找和计算满足特定要求的子字符串。查找和计算所有至少包含一个元音和一个辅音的子字符串就是这样一个任务。这个问题展示了多种算法技术,从暴力破解方法到更有效的策略,并且对于理解字符串操作也至关重要。 在本节中,我们将讨论使用 Java 解决此问题的一些方法。我们将从一个主要的暴力破解方法开始,该方法检查每个子字符串,然后再继续讨论更有效的方法,例如计数方法和滑动窗口技术。 每种方法都将提供详细的解释和代码实现,以便您可以看到性能和简单性之间的权衡。 示例输入: S = "sunnyday" 输出 2 解释: 字符串可以分割为“su”、“nnyday”。 输入: S = "programming" 输出 4 解释: 字符串可以分割为“pro”、“gr”、“amm”、“ing”。 方法 1:蛮力法步骤:
文件名:VowelConsonantSubstrings.java 输出 Total substrings: 7 方法 2:优化滑动窗口法该方法通过使用滑动窗口技术来优化暴力破解方法。其思想是维护一个在遍历字符串时动态调整的窗口。 步骤:
文件名:VowelConsonantSubstrings.java 输出 Total substrings: 7 解释滑动窗口方法使用一个窗口来动态地改变和评估子字符串,因为我们遍历文本,从而优化了暴力破解方法。为了定义窗口,我们维护两个指针,并将其扩展,直到我们在其中找到元音和辅音。 在识别出有效窗口后,我们向前移动窗口以继续搜索,方法是计算可以从当前窗口创建的所有子字符串。尽管此方法消除了冗余并将时间复杂度降低到 O(n 2),但由于仍然需要嵌套循环,因此其效率仍不如计数方法。 方法 3:元音和辅音对通过遍历字符串并计算元音和辅音,可以应用此方法。我们计算对于检测到的每个元音,可以有多少个有效子字符串是用迄今为止看到的辅音构建的。 步骤:
文件名:VowelConsonantSubstrings.java 输出 Total valid substrings: 2 解释通过在遍历字符串时直接计算有效子字符串的数量,此方法进一步优化了过程。对于每个识别出的元音,我们加上可以使用所有先前辅音创建的子字符串的数量,反之亦然。由于我们只遍历字符串一次,因此时间复杂度降低到 O(n),并且可以有效地计算所有潜在的有效子字符串。 结论可以使用不同的策略来最大化包含至少一个元音和一个辅音的子字符串的数量,每种策略的效率程度不同。对于大字符串,暴力破解方法虽然简单,但效率低下。 尽管它优化了搜索,但滑动窗口方法仍然具有二次时间复杂度。最有效的方法通过简单地计算对来将时间复杂度降低到线性时间。 |
在 Java 中,一个有效的 final 变量不是用 final 关键字声明的,但它的值在初始赋值后不会改变。当处理 lambda 表达式和匿名内部类时,此概念至关重要,它们只能访问是...的局部变量。
7 分钟阅读
给定一个字符串,我们的任务是使用最多 N/2 次移动来排序一个由前 N 个不同字母组成的字符串。每次移动包括以下步骤:选择任何三个不同的索引。在这些索引处,执行循环移位...
11 分钟阅读
Java 中的 ParseException 是一个检查型异常。当由于格式不正确而无法将日期字符串解析为 Date 对象时,会发生此异常。SimpleDateFormat.parse() 等方法会抛出此异常,通常是由于日期模式不匹配或日期值无效,导致...
7 分钟阅读
CLASSPATH:CLASSPATH 是一个环境变量,应用程序类加载器使用它来定位和加载 .class 文件。CLASSPATH 定义了查找 Java 平台不包含的第三方和用户定义类的路径。包含包含...的所有目录。
5 分钟阅读
? 用户体验在快节奏的软件开发领域至关重要。向您的 Java 程序添加一个设计精美的启动屏幕可以立即吸引用户的注意力。除了提供视觉上愉悦的开场白,启动屏幕还可以让用户放心,该程序正在...
阅读 4 分钟
在 Java 中,我们通常在编译时会遇到错误和异常。但是“javac 命令未识别”是许多新 Java 程序员面临的最常见错误。在本节中,我们将检测 javac 命令未识别的原因……
阅读 4 分钟
? Java Timer 类 在 Java 中,Timer 是一个属于 java.util 包的类。它扩展了 Object 类并实现了 Serializable 接口。该类提供了可用于执行与时间相关的活动的构造函数和方法。使用 Timer 类,我们可以……
阅读 2 分钟
? Java 是最广泛使用的编程语言之一,应用范围广泛,从开发移动应用程序到基于 Web 的应用程序和软件系统。然而,Java 并非没有需要故障排除的问题,包括弃用错误。当方法或...
阅读 4 分钟
Java 多线程中 start() 和 run() 方法的区别 多线程是 Java 的核心功能,它允许程序两个或多个部分的并发执行,从而最大限度地利用 CPU。Java 提供了 Thread 类和 Runnable 接口来实现...
5 分钟阅读
在本节中,我们将讨论如何在 Java 中反转链表。反转链表是面试中最常问到的主题之一。任务是反转一个链表,给定头节点或第一个节点...
阅读 10 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India