如何在不使用indexOf的情况下匹配另一个字符串中的字符串?

时间:2016-08-04 17:17:52

标签: javascript algorithm

我们只想说我有两个字符串,a& b

var a = 'john.smith@yahoo.com';
var b = 'yahoo12345556';

我期待的结果是yahoo,但使用a.indexOf(b)会给我-1

如果我将b更改为yahoo&做a.indexOf(b),它显然不会给我-1

我应该在循环中匹配字符吗?但是这两个字符串的长度不相等。字符应该按顺序排列也很重要,我不是在寻找字符的出现。

2 个答案:

答案 0 :(得分:2)

看来你正在寻找Longest Common Substring问题。 这是good javascript implementation的解释。

答案 1 :(得分:1)

您可以使用递归来解决此问题:

function findLongestCommon (a, b, len) {
    for (var i = 0; i < a.length-1; i=i+len) {
        var sub = a.substring(i, len)
        if (len == 0){
            return "";
        }
        else if (sub.indexOf(b) != -1) {
            return a;
        }
        else{
            return findLongestCommon(a, b, len-1);
        }
}

通过调用findLongestCommon(a,b,a.length),您将能够查看从最大(整个字符串)到最小(一个字母)开头的每个字母组合,如果没有找到任何字母,它将会返回空字符串。