您的位置:首页 > 职场人生

微软面试题:求两个字符串的最大子字符串

2009-01-09 11:18 246 查看
我也写了一个,感觉效率不错,不递归,不使用正则,如果有多个相同长度的最大子字符串,则输出全部子串.

字符串1:

字符串2:

PS: 不输入可以运行测试

function maxSubString(a,b)
{
var cancu_count = 0;
var len_a = a.length,len_b = b.length,sum_len=len_a+len_b,k=0,max=[],count=0;
if(len_a>len_b)
{
var c = a;
a = b;
b = c;
len_a = sum_len - len_a;
len_b = sum_len - len_b;
}
var arr_a = a.split("");
var arr_b = b.split("");
offset_a=len_a-1,offset_b = 0;
for(var i=0;i len_b - 1)
k--;
var temp_start = -1,temp_count = 0;
for(var m=0;m count)
max = [];
if(m==k-1 && temp_count >= count)
{
max.push([temp_start,temp_count]);
count = temp_count;
}
}
else
{
if(temp_start > -1 && temp_count >= count)
{
max.push([temp_start,temp_count]);
count = temp_count;
}
temp_count = 0;
temp_start = -1;
}
}
if(i0)
offset_a--;
if(i>=len_a-1 && offset_b < len_b -1)
offset_b++;
}
var max_str = [];
for(var i=0;i0)
{
for(var k = 0;k0)
alert(a + '与 '+ b +' 的最长子串是: '+maxSubString(a,b));
else
{
for(var i=0;i

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

跟上面那个比较起来,下面这个算法先计算较大的字串,感觉效率上应该更高一些,特别是相似度较高的字串,猜想一下,对于中文分词算法,为什么会有"反向最大匹配"一说呢, 比如,打架,打的,显示,后面一个字对会词汇的含义有决定作用,所以要反向匹配,不知道这样理解是否正确。

字符串1:

字符串2:

PS: 不输入可以运行测试

function maxSubString(a, b) {
var msg ='';
if (a == b) return a;
var _a, _b, _lena, _lenb;
if (a.length > b.length) {
var t = a;
a = b;
b = t;
t = null;
}
if (a.length == 1)
return a;
if(b.indexOf(a) > -1)
return a;
var _s = [];
for (var k = a.length - 1,m = 2; k > 0; k--, m++) {
msg+='比较测试字串长度: ' + k + ', 测试次数: ' + m +'
';
for (var i = 0; i < m; i++) {
_s.push(a.substring(i, i+k));
msg +='k='+k+ ',当前片段: ' + a.substring(i,i+ k) + '
';
}
var re = [];
for (var t = 0; t < _s.length; t++) {
if (b.indexOf(_s[t]) > -1) {

if(re.length == 0)
re.push(_s[t]);
else
{
var exits = false;
var n=0;
while(!exits && n匹配成功: '+_s[t]+'
';
msg+='结果长度: '+re.length + '
';
}
}
if (re.length > 0)
{
document.getElementById('msg_box').innerHTML += msg + "";
return re.join(',');
}
}
return 'not found!';
}
function canculate()
{
var test_data = [['12-bcd-12345-dd----', 'abcd--123--1234'], ['1234', '123'], ['abbccdd', '1ccbbaa'], ['abbbcc', '1ccbbba']];
var result = [];
if(document.getElementById('a').value.length == 0)
{
for(var i=0;i

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: