Algorithm 字符串匹配替代方法

Algorithm 字符串匹配替代方法,algorithm,pattern-matching,string-matching,Algorithm,Pattern Matching,String Matching,试着写我自己的快速模式匹配算法。不想使用特定于语言的解决方案。我专注于编写算法。这是因为我在读关于字符串匹配的不同技术。有些很复杂但很有趣,比如拉宾·卡普,等等。 我想出了这个快速线性的方法。它与我尝试过的不同输入配合得很好。所以我在想,有什么理由我不应该使用这种方法而不是众所周知的方法。基本上,我是拿一个字符的文本和相应的字符的模式进行比较-一次一个。 此外,如果有人能指出我在这一点上的错误-这将是伟大的。感谢您提前回复和评论:) 使用标准方法的两个原因: 编写一个只做错误事情的方法很容易。您

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


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

  • 编写一个只做错误事情的方法很容易。您的方法是这样的,因为它将无法匹配,例如,模式“ab”与字符串“aab”。(它匹配模式的第一个“a”和字符串,然后将“b”与字符串的第二个“a”匹配失败,然后继续查看是否可以找到从字符串的第三个字符开始的匹配。)
  • 标准方法是快速的。您的算法是线性的,这非常好(如果它也是正确的话!)。然而,许多字符串匹配算法将在次线性时间内工作。也就是说,匹配字符串所需的时间在输入问题的大小上比线性增长得慢。也许很难相信,但这是真的。(请阅读文献以获取该声明的证据。)

  • 该方法的要求是什么?你还没有发布,所以不可能说它是好是坏。你能给出一些你想要完成的事情的例子吗?控制问题:如果文本包含重复的序列,比如“xyz”并将其与“xyz”匹配,你的方法会做你想做的吗?你的编程语言或运行时是否包含像IndexOf或contains这样的字符串方法?如果是,为什么不使用它们?这与简单的字符串匹配算法有何不同?将“xxxy”与“xxxxy”匹配如何?正如泰德·霍普在回答中指出的那样,我相信你的算法是错误的:)
    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;
    }