问题:
请写一个函数,找出两个字符串中最长的相同的字符串。比如: 字符串“likeyou”和“Lookyou” 最长的相同字符串是“you” 怎么写?
来源:
http://topic.youkuaiyun.com/u/20100610/17/94c675b2-0ad9-43cd-b091-130ae6091d98.html
假设str1= “abcde”
Str2= “cdefgd”
第一步:
找出str2中与str1的每个字符相同的所有位置,生成表1
表1
字母 | 序号 | Str2中对应的位置1 | Str2中对应的位置2 |
a | 0 | 无 | 无 |
b | 1 | 无 | 无 |
C | 2 | 0 | 无 |
d | 3 | 1 | 5 |
e | 4 | 2 | 无 |
第二步:将str2中的位置减掉前面的序号,生成表2
表2
字母 | 序号 | Str2中对应的位置1 | Str2中对应的位置2 |
a | 0 | 无 | 无 |
b | 1 | 无 | 无 |
C | 2 | -2 | 无 |
d | 3 | -2 | 2 |
e | 4 | -2 | 无 |
第三步:找出表2中连续相等的位置列表
列表1:【2:0】【3:0】【4:0】
列表2:【3:1】
第四步:根据第三步的列表反插表1,得到在str2中对应得位置列表
列表3:0,1,2
列表4:5
第五步:根据第四步的结果,检索str2的0,1,2位置分别对应c,d,e,拼接起来构成cde所以最后结果是cde
代码如下: