3

我需要查找给定的子字符串是否包含在给定的字符串中。但约束是我不能使用任何预定义的 Java 方法。我已经尝试如下。

public void checkAvailability()
{
    len=st.length();
    for(int i=0;i<len;i++)
    {
        for(int j=0;j<substr.length();j++)
        {
            if(st.charAt(i)==substr.charAt(j))
            {
                if(j!=substr.length()-1 && i!=st.length()-1)
                {
                    if(st.charAt(i+1)==substr.charAt(j+1))
                    {
                        available=true;
                        //j++;
                        count++;
                    }
                }
            }
        }
    }
    if(available)
    {
        System.out.println("The character is available " + count + " times");
    }
    else
    {
        System.out.println("The character is not availabe");
    }
}

但它没有给出正确的答案。有人可以帮忙吗?

先感谢您...

4

1 回答 1

2

您的代码中有一些错误 - 我将在不编写代码的情况下描述一个算法,以避免破坏您的学习练习:

  • 外循环需要从 0 到st.length()-substr.length()
  • 内循环需要检查st.charAt(i+j)substr.charAt(j)
  • 一旦发现不匹配,内部循环就需要停止;设置不匹配标志,然后中断
  • 如果内部循环完成而没有发现不匹配,那么i就是第一个匹配的位置。

请注意,这是最直接的算法。它在st长时表现不佳,并且substr有很多“误报”。一般来说,您可以做得更好,例如使用KMP 算法

于 2013-05-11T16:39:39.893 回答