关于公共子串的分析,求两个字符串中所有公共子串个数,以及最长公共子串和长度。
2017-09-05 09:33
381 查看
题目:给出两个字符串,需要计算它们所有公共子串的个数,以及其中最长公共子串和长度值。并用空格隔开;如果没有,则输出为0.
思路:对于输入,因为题目为一行输入,所以定义String数组储存,并用空格隔开两个字符串。第一个数组为第一个字符串,第二个数组为第二个字符串。分别用a[0],a[1]表示,并赋值给String字符串。两个字符串中求最长公共字符串,先选取出两个中较长的字符串,对于短的字符串进行依次遍历,判断出长字符串包含短字符串最大长度。并将计数+1,进行循环,直到满足两个字符串中短字符串的长度,
备注:网上笔试题,代码是参考网上别人的,具体出处找不到了,请谅解。摘抄记录下来方便日后学习。如果有问题尽请批评指正,希望可以和大神一起交流。
java代码如下:
import java.util.Scanner; public class Main03 { // 求解两个字符号的最长公共子串 public static void maxSubstring(String strOne, String strTwo){ // 参数检查 if(strOne==null || strTwo == null){ System.out.println(0); } if(strOne.equals("") || strTwo.equals("")){ System.out.println(0); } // 二者中较长的字符串 String max = ""; // 二者中较短的字符串 String min = ""; if(strOne.length() < strTwo.length()){ max = strTwo; min = strOne; } else{ max = strTwo; min = strOne; } String current = ""; Boolean bool =true; String temp=""; int count=0; // 遍历较短的字符串,并依次减少短字符串的字符数量,判断长字符是否包含该子串 for(int i=0; i<min.length(); i++){ for(int begin=0, end=min.length()-i; end<=min.length(); begin++, end++){ current = min.substring(begin, end); if(max.contains(current)){ count++; if(bool) { temp=current; bool =false; } } } } System.out.println(count+" "+temp.length()); //输出最大公共长度的字符串 System.out.println(temp); } public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { String aa = in.nextLine(); String[] a = aa.trim().split(" "); String m =a[0]; String n =a[1]; new Main03().maxSubstring(m, n); } } }
样例输入:
abc edg
abc a
abc ab
样例输出:
0 0
1 1
3 2
相关文章推荐
- 求两个字符串最长公共子串的长度
- 求两个字符串公共子串的最长长度
- 【每天学点算法题10.15】获取两个字符串之间最长公共子串的长度
- 【后缀数组】 POJ 2774 Long Long Message 两个字符串的最长公共子串长度
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。 设计: 设计一个类 String,包括一个 len(字符串长度)和字符串指针 s。另有如下成员函数: ·
- 问题:求两个字符串的最长公共子串。 要求:输入两个字符串,输出它们的最长公共子串,包括长度。
- 给出两个字符串,找到最长公共子串,并返回其长度,java实现
- 求两个字符串的最长公共子串的长度
- 求两个字符串的最长公共子串的长度
- 求两个字符串中的最长公共子串的长度
- 获取两个字符串之间最长公共子串的长度
- 求两个字符串的最长公共子串(LCS)
- 求字符串中满足所有字符个数相等的最长子串长度
- 两个字符串寻找最长公共子串
- 查找两个字符串a,b中的最长公共子串
- 求两个字符串的最长的连续公共子串
- 求两个字符串的最长公共子串
- C语言求两个字符串的最长公共子串
- java_基础知识_字符串练习题_计算两个字符串的最长公共字串长度
- 实用算法实现-第 8 篇 后缀树和后缀数组 [3 两个字符串的最长公共子串]