首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

求两个字符串的子串(基础算法练习题)

2012-08-27 
求两个字符串的子串(基础算法练习)??问题描述:求两字符串中的最大公共子字符串 并输出长度。 例如abbcgre

求两个字符串的子串(基础算法练习)

?

?

问题描述:

求两字符串中的最大公共子字符串 并输出长度。 例如"abbcgre","abcgra"中最大子字符串"bcgr"

?

?

下面是我的实现:

? 先找出相对较小的一个字符串,从最大长度比较起,逐渐缩小

?比如, abbcgre,abcgra两个字符串,相对长度较小的是abcgra,先看abcgra是否是abbcare的子串,

?如果不是,则长度缩小一位

两种可能 abcgr, bcgra渐次比较,

length=6 索引:0-6?子串:abcgra

?length=5? 0-5,1-6? 子串:abcgr,bcgra

length=?4 索引:?0-4,1-5,2-6 子串:abcg,bcgr,cgra ,cgra,bcgr,abcg

length=3 索引:?0-3,1-4,2-5,3-6?子串:??abc,bcg,cgr,gra gra,cgr,bcg,abc?
?length=2 索引:0-2,1-3,2-4,3-5,4-6 子串:ab,bc,cg,gr,ra

length=1?? 索引:?0-1,1-2,3-4,4-5,5-6 子串:?a,b,c,g,r,a

?

代码:

?

public static String getCommonSub(String str1, String str2) {String bigStr = null;String smallStr = null;if (str1.length() - str2.length() > 0) {bigStr = str1;smallStr = str2;} else {bigStr = str2;smallStr = str1;}for (int i = smallStr.length(); i > 0; i--) {int begain = 0;int end = i;for (int j = smallStr.length() - i; j >= 0; j--) {String result = smallStr.substring(begain, end);if (bigStr.contains(result)) {return result;}begain++;end++;}}return null;}

?

?

热点排行