字符串匹配备用方法

时间:2014-09-05 02:32:11

标签: algorithm pattern-matching string-matching

尝试编写自己的快速模式匹配算法。不想使用特定于语言的解决方案。我专注于编写算法。这是因为我正在阅读有关进行字符串匹配的不同技术。有些是复杂但非常有趣,如拉宾karp等。 我想出了这种快速且线性的方法。它适用于我尝试过的不同输入。所以我在想是否有任何理由我不应该使用这种方法而不是众所周知的方法。基本上我正在使用文本字符并与模式的相应字符进行比较 - 一次一个。 此外,如果有人能指出我的错误 - 这将是伟大的。感谢您提前回复和评论:)

public static boolean patternMatch(String pattern, String text)
{
    if(pattern == null)
        return true;
    if(text == null)
        return false;

    char[] patternArray = pattern.toCharArray();
    char[] textArray = text.toCharArray();

    int length = pattern.length();
    int j = 0;
    for(char t : textArray)
    {
        if(t == patternArray[j])
        {
            j++;
            if(j == length)
                return true;
        }
        else {
            j = 0; 
            if(t == patternArray[j]) j++;
        }
    }
    return false;
}

1 个答案:

答案 0 :(得分:2)

使用标准方法的两个原因:

  1. 编写一个简单做错事的方法很容易。你的方法是这样的,因为它将无法匹配,例如,模式“ab”对着字符串“aab”。 (它匹配模式的第一个“a”和字符串,然后无法将“b”与字符串的第二个“a”匹配,然后继续查看是否可以找到从第三个字符开始的匹配字符串。)
  2. 标准方法。你的算法是线性的,这是非常好的(如果只是它也是正确的!)。但是,许多字符串匹配算法将在次线性时间内工作。也就是说,匹配字符串所花费的时间比输入问题的大小线性增长更慢。也许很难相信,但也是如此。 (阅读文献以了解该声明的证据。)