论坛首页 Java企业应用论坛

一道简单的求最大相似字串的笔试题

浏览 12654 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (5)
作者 正文
   发表时间:2012-03-05  
KMP算法
0 请登录后投票
   发表时间:2012-03-05   最后修改:2012-03-05

gdfdghdkhjghkjljhhdr          e  r  把 . . .  j    
dfdghdkhjghkjljhhdrg          r   d 前        e
fdghdkhjghkjljhhdrgd          d  k 几        r
把前几个字放到后面尾部   * k  h 个       d
. ....                                      h  j  字        k  =
.                                           j  g  放        h
.                                           g h  到        j
.                                           h j   尾         g
.                                           j e   部         h
.            
rgdfdghdkhjghkjljhhd
(上面字符取前9位)


把上面两个矩阵相乘

 

0 请登录后投票
   发表时间:2012-03-05  
用正则表达式,是不是能方便一些?
0 请登录后投票
   发表时间:2012-03-05  
icanfly 写道
KMP算法

关KMP鸟事
0 请登录后投票
   发表时间:2012-03-05  
	public static String GetLargePublicString(String A,String B) { 
	String shortString = A.length() > B.length() ? B : A;//取较短者; 
	String longString = A.length() > B.length() ? A : B;//取较长者; 
		for (int i = shortString.length(); i > 0; i--)//长度递减 
	{ 
	  for (int j = 0; j <= shortString.length() - i; j++)//位置递增 
	  { 
	   if (longString.indexOf(shortString.substring(j,i)) != -1) 
	   { 
	    return shortString.substring(j, i); 
	   } 
	  } 
	} 
	return "empty"; 
	} 
0 请登录后投票
   发表时间:2012-03-05  
String s1=erdkhjghj;
String s2=gdfdghdkhjghkjljhhdr;

我的思路是找出 s1 中所有的顺序的排列组合 例如 e er  erd  djh  highj   等
然后 再和s2里面的 比较   s2 包含 排列组合 里的 长度最大的 子串 就是答案
所以 本题的难点 也就是 就 求 s1 的所有的子串的问题 
至于怎么求  楼下 回答 :D 
0 请登录后投票
   发表时间:2012-03-06  
cttnbcj 写道
icanfly 写道
KMP算法

关KMP鸟事

我觉得kmp匹配模式倒有点儿道理
0 请登录后投票
   发表时间:2012-03-06  
sweat89 写道
	public static String GetLargePublicString(String A,String B) { 
	String shortString = A.length() > B.length() ? B : A;//取较短者; 
	String longString = A.length() > B.length() ? A : B;//取较长者; 
		for (int i = shortString.length(); i > 0; i--)//长度递减 
	{ 
	  for (int j = 0; j <= shortString.length() - i; j++)//位置递增 
	  { 
	   if (longString.indexOf(shortString.substring(j,i)) != -1) 
	   { 
	    return shortString.substring(j, i); 
	   } 
	  } 
	} 
	return "empty"; 
	} 

这个是错的。
请试一下这个测试用例。
String A = "12345";
String B = "223456789";
返回的是“234”。
代码看起来就别扭,看第一眼就觉得有问题。
0 请登录后投票
   发表时间:2012-03-06  
我也觉得公司是想考你KMP算法...
0 请登录后投票
   发表时间:2012-03-06  
写个KMP算法的解法看看?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics