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 に答える