Algorithm 字符串匹配替代方法
试着写我自己的快速模式匹配算法。不想使用特定于语言的解决方案。我专注于编写算法。这是因为我在读关于字符串匹配的不同技术。有些很复杂但很有趣,比如拉宾·卡普,等等。 我想出了这个快速线性的方法。它与我尝试过的不同输入配合得很好。所以我在想,有什么理由我不应该使用这种方法而不是众所周知的方法。基本上,我是拿一个字符的文本和相应的字符的模式进行比较-一次一个。 此外,如果有人能指出我在这一点上的错误-这将是伟大的。感谢您提前回复和评论:)Algorithm 字符串匹配替代方法,algorithm,pattern-matching,string-matching,Algorithm,Pattern Matching,String Matching,试着写我自己的快速模式匹配算法。不想使用特定于语言的解决方案。我专注于编写算法。这是因为我在读关于字符串匹配的不同技术。有些很复杂但很有趣,比如拉宾·卡普,等等。 我想出了这个快速线性的方法。它与我尝试过的不同输入配合得很好。所以我在想,有什么理由我不应该使用这种方法而不是众所周知的方法。基本上,我是拿一个字符的文本和相应的字符的模式进行比较-一次一个。 此外,如果有人能指出我在这一点上的错误-这将是伟大的。感谢您提前回复和评论:) 使用标准方法的两个原因: 编写一个只做错误事情的方法很容易。您
使用标准方法的两个原因:
该方法的要求是什么?你还没有发布,所以不可能说它是好是坏。你能给出一些你想要完成的事情的例子吗?控制问题:如果文本包含重复的序列,比如“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;
}