Java找出两个字符串中所有共同的子串。
时间: 2024-05-03 11:20:35 浏览: 153
您好!关于您的问题,要找出两个字符串中所有共同的子串,可以采用暴力匹配法,对于其中一个字符串,逐个截取所有长度相同的子串,然后在另一个字符串中查找是否存在相同的子串,找到则记录下来即可。
代码示例:
```java
public static List<String> findCommonSubstrings(String s1, String s2) {
List<String> commonSubstrings = new ArrayList<>();
for (int i = 0; i < s1.length(); i++) {
for (int j = i + 1; j <= s1.length(); j++) {
String substring = s1.substring(i, j);
if (s2.indexOf(substring) != -1) {
commonSubstrings.add(substring);
}
}
}
return commonSubstrings;
}
```
注意,以上仅为一种常见的解法,实际上还存在更高效的算法,例如动态规划和后缀树等。
相关问题
题目描述:写函数实现如下功能,给定字符串A和B,输出A和B中的最长公共子串。比如A="aocdfe" B="pmcdfa" 则输出"cdf"。 输入描述:输入待处理的两个字符串 str1,str2 输出描述:找出两个字符串最长的公共子串 java代码
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
System.out.println(longestCommonSubstring(str1, str2));
}
public static String longestCommonSubstring(String str1, String str2) {
int m = str1.length();
int n = str2.length();
int[][] dp = new int[m + 1][n + 1]; // dp[i][j]表示以str1[i-1]和str2[j-1]结尾的公共子串长度
int maxLen = 0; // 记录最长公共子串的长度
int endIndex = 0; // 记录最长公共子串在str1中的结束位置
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (str1.charAt(i - 1) == str2.charAt(j - 1)) { // 如果当前字符相同
dp[i][j] = dp[i - 1][j - 1] + 1;
if (dp[i][j] > maxLen) { // 如果当前公共子串长度大于之前的最长公共子串长度
maxLen = dp[i][j];
endIndex = i - 1;
}
}
}
}
return str1.substring(endIndex - maxLen + 1, endIndex + 1);
}
}
```
计算一个字符串中某一子串出现的次数并返回,通过方法参数传入,Java
在Java中,你可以创建一个名为`countSubstring`的方法,接收两个参数:一个主字符串(`String mainStr`)和一个子串(`String subStr`)。这个方法通常会遍历主字符串,使用`indexOf`或`substring`配合循环来计算子串出现的次数。下面是一个简单的实现示例:
```java
public class Main {
public static int countSubstring(String mainStr, String subStr) {
int count = 0;
// 如果子串为空,则直接返回0
if (subStr.isEmpty()) {
return count;
}
// 使用while循环直到找不到更多子串的位置
while ((count = mainStr.indexOf(subStr, count)) != -1) {
// 当找到一个子串后,将索引加一作为下一次搜索的起点
// 并且增加计数器
count++;
}
return count;
}
public static void main(String[] args) {
String str = "Hello, world! Hello again!";
String substr = "Hello";
System.out.println("Substring '" + substr + "' appears " + countSubstring(str, substr) + " times in the string.");
}
}
```
在这个例子中,如果你运行`main`函数,它会打印出子串"Hello"在主字符串中出现了2次。
阅读全文