java中的简单字符串匹配

And*_*eda 0 java

我正在尝试实现简单的字符串匹配.如果 String包含模式 String,则算法应返回1 .我无法理解为什么它在以下输入上返回-1

    String source = "aababba";
    String pattern = "abba";
Run Code Online (Sandbox Code Playgroud)

这是我的实现:

public static int findMatch(String source, String pattern)
{
    int j = 0,  pos = -1;
    boolean matched = false;

    if(source.length() < pattern.length())
        return -1;


    for(int i = 0; i < (source.length() - pattern.length()); i++)
    {
        if(source.charAt(i) == pattern.charAt(j))
            j++;
        else
            j = 0;
        if(j == pattern.length())
        {
            matched = true;
            break;
        }           
    }

    if(matched)
        return 1;       
    return -1;  
}   
Run Code Online (Sandbox Code Playgroud)

编辑: 正如你们许多人所说,罪魁祸首是for循环.我应该如下所示.其余的代码是一样的.如答案中所示,其他解决方案也是可能的.

for(int i = 0; i <= (source.length() - pattern.length()); i++)
    {
        if(source.charAt(i+j) == pattern.charAt(j))
        {
Run Code Online (Sandbox Code Playgroud)

Ros*_*rew 6

您只检查三个字符

source.length() - pattern.length()
Run Code Online (Sandbox Code Playgroud)

所以j永远不会等于pattern.length.你需要检查整个source.

for(int i = 0; i < source.length(); i++)
{
  if(source.charAt(i) == pattern.charAt(j))
  ...
}
Run Code Online (Sandbox Code Playgroud)

关于解决方案

for(int i = 0; i <= (source.length() - pattern.length()); i++)
    {
        if(source.charAt(i+j) == pattern.charAt(j))
        {
Run Code Online (Sandbox Code Playgroud)

为什么有一个额外的减法和加法加上更复杂的代码,当你只需要逐步调整源代码?