在网上看了一些求两个字符串的最大公共子串的例子,因为多是用了一些算法的思想,自己看的不太懂,就自己试着写了一个,结果还是有些惊喜的,虽然应该不是最简单和高效的,但应该是代码比较少的了吧,呵呵~小骄傲一下。
public class CompareStrM
{
public static void main(String[] args)
{
String str1 = "今天,听到一首歌是这么唱的:“明月几时有,把酒问青天”。。。。";
String str2 = "苏轼的“明月几时有,把酒问青天”是千古名句";
String minStr = str1.length() >= str2.length() ? str2 : str1;
String maxStr = str1.length() <= str2.length() ? str2 : str1;
ArrayList<String> lList = new ArrayList<String>();
int maxLength = 1;
for (int i = 0; i < minStr.length() - maxLength * 2; i++) {
String subStr = minStr.substring(i, i + maxLength);
if (maxStr.contains(subStr)) {
String str = null;
int len = maxLength;
do {
len++;
str = minStr.substring(i, i + len);
} while (maxStr.contains(str));
if (len-- >= maxLength) {
lList.add(str.substring(0, str.length() - 1));
maxLength = len;
}
}
}
System.out.println("MaxLength: " + maxLength + "\n");
for (String s : lList) {
if (s.length() == maxLength) {
System.out.print("最大相同子串是: " + s);
}
}
}
}
之后,也会继续整理一些找到的资料贴到下面。
分享到:
相关推荐
两个字符串里求最长的公共子串
在Java编程中,实现字符串匹配并...总之,Java实现字符串匹配求两个字符串的最大公共子串是一个涉及字符串处理和动态规划的经典问题。通过理解上述算法思想和代码实现,开发者可以有效地处理文本数据的比较和分析任务。
设计最大公共子串 第一步:输入字符s和t 第二步:将s和t拆分,建立一个二维数组 第三步:比如第一行第一列表示字符串s和t的第一个字符是否相等,相等返回1,不等返回0 第四步:分别求二维数组中斜线上的公共子串...
在本例中,是寻找字符串与其反转后的最大公共子串。 解决此问题的一种有效方法是使用动态规划。动态规划是一种通过构建表来解决复杂问题的方法,它可以避免重复计算子问题。以下是一个简单的Java代码实现: ```...
根据给定文件的信息,本文将详细介绍如何在两个字符串中寻找最大公共子串的算法实现。 ### 一、问题背景 在计算机科学中,查找两个字符串中的最大公共子串是一个非常实用的问题,它广泛应用于文本处理、生物信息学...
Java获取两个字符串中最大相同子串的方法是Java编程语言中常见的问题之一,其目的是找到两个字符串中最长的公共子串。这种方法有多种实现方式,但今天小编要分享的是一种简单、实用的方法。 在了解这个方法之前,让...
### 最长公共子串问题解析 #### 一、问题背景及定义 在计算机科学领域,尤其是在数据处理与算法设计方面,“最长公共子串”(Longest Common Substring, LCS)是一个非常重要的概念。该问题主要涉及到两个或多个...
通过遍历这个表,我们可以找到最大值,从而得到最长公共子串。 具体实现时,我们可以从较小的子串开始,逐步增加长度,检查当前字符是否匹配。如果匹配,我们就将当前子串的长度加1;如果不匹配,我们就将子串长度...
目录(善用Ctrl+F) 本人面试点合集 脑图在线编辑地址 ...最大公共子串 动态规划 大厂面试爱问的「调度算法」,20张图一举拿下 图解红黑树 面试必备 | 不可能的食品链表 红黑树【图解】 改进学习工具网站 必会框架
最大公共子串 动态规划 大厂面试爱问的「调度算法」,20 张图一举拿下 图解红黑树 面试必备 | 不可不会的反转链表 红黑树【图解】 算法学习工具网站 必会框架 Spring全家桶以及源码分析 SpringCloud 分布式框架基石-...
一、最长公共子串(Longest Common Substring) 最长公共子串是指在两个或多个字符串中,最长的、相同的字符序列。例如,字符串"ABCD"和"ACDF"的最长公共子串是"AC"。这个概念对于比较两段字符间的差异至关重要,...
KMP算法的核心在于构建一个“部分匹配表”(next function),它存储了目标子串的前缀和后缀的最大公共长度。这个表可以帮助我们避免不必要的比较,当主字符串中的字符与子串不匹配时,我们可以根据部分匹配表快速跳...
Java String方法获取字符出现次数及字符最大相同部分示例 Java String类提供了多种方法来处理字符串,包括获取字符出现次数和获取字符最大相同部分。本文将详细介绍这两个操作的实现方法。 获取字符出现次数 获取...
- 练习:使用String类创建字符串对象,进行字符串连接、查找子串、替换子串等操作。 7. **类与对象** - 练习:设计一个简单的类,如Student,包含姓名、年龄属性,以及获取和设置这些属性的方法。创建类的对象并...
它可以用于解决如最长重复子串、最长公共子串等问题,具有较高的查询效率。 6. **配对堆**(PairingHeap.java): 配对堆是一种优先队列的实现,基于半链接堆的概念。它在插入和删除最大元素时有良好的性能,并常用于...
堆栈常用于回溯、括号匹配、深度优先搜索等问题,如有效括号、最长回文子串等。 4. **队列**:队列遵循“先进先出”(FIFO)原则。Java中有ArrayDeque和LinkedList可以实现队列。常见的队列问题有银行排队、滑动...
- **背包问题**:在容量限制下,选择价值最大的物品组合,涉及贪心策略和状态转移方程。 - **最长公共子序列**:找出两个序列中最长的不降序子序列,用于文本比对。 5. **回溯法**: - **八皇后问题**:在棋盘上...
3. 栈:Java的Stack类是Vector的一个子类,实现了后进先出(LIFO)的数据结构,常用于函数调用栈和表达式求值。 4. 队列:Queue接口及其实现类如ArrayDeque,提供了先进先出(FIFO)的数据结构,适用于任务调度和...
在Math类中,提供了各种数学函数,如求最大值、最小值、绝对值,三角函数,对数和指数运算,以及随机数生成等。例如,`Math.random()`方法返回0.0到1.0之间的一个随机浮点数。 String类在Java中是不可变的,意味着...