2017-08-18 5 views
-4

解決方法がわからない再帰問題に苦しんでいます。ヒントを教えてください。サブストリングを再帰的にカウントする

例: 文字列と空でない部分文字列subを指定すると、文字列内にsubが重複することなく繰り返し表示される回数を再帰的に計算します。

public int strCount(String str, String sub) { 
    if(str == null || str.length() == 0 || str.indexOf(sub) == -1) 
     return 0; 

    if(str.indexOf(sub) !=) 
     str = str.replace(sub,""); 

    return 1+strCount(str,sub); 
} 
+2

ようこそスタックオーバーフロー!どのようにサイトが動作しているのか、そしてここでどのような質問がトピックにあるのかを見て、それに応じて質問を編集してください(http://stackoverflow.com/tour)。 「なぜ誰かが私を助けることができますか?」実際の質問ではありませんか?](http://meta.stackoverflow.com/q/284236) –

+1

私はcodebatのように見えます。あなた自身で練習し、本当の疑問や問題に戻ってください。 –

+0

あなたが試したことと何がうまくいかなかったことを示すことができますか?ここで提供された情報に基づいて、どんな種類の助けが必要かを正確に知ることは困難です。あなたがこれまでに試したことを見ることができれば、適切なガイダンスを提供する方がはるかに簡単です。含めるコードについては、[mcve]も参照してください。オフトピック – EJoshuaS

答えて

2

方法は非常に簡単です::

    strCount("catcowcat", "cat") → 2 
    strCount("catcowcat", "cow") → 1 
    strCount("catcowcat", "dog") → 0 
    

    これは私が試したものを与えられた方法(コメントから)


    編集

    public int strCount(String str, String sub) { 
    //...  
    } 
    
    です
  • substringStringに含まれている場合は、一度それを削除し、あなたが(return 1 + maybeThereIsMore一度それを見つけると言う)

  • 、あなたがそれを見つけるとreturn 0;


public static int strCount(String str, String sub) { 
    if (str.contains(sub)) { 
     return 1 + strCount(str.replaceFirst(sub, ""), sub); 
    } 
    return 0; 
} 
ていなかったと言います
strCount("catcowcat", "cat") → 1+strCount("cowcat", "cat") → 1+1+strCount("cow", "cat") → 2 
strCount("catcowcat", "cow") → 1+strCount("catcat", "cow") → 1 
strCount("catcowcat", "dog") → 0 

注:この方法は、それは我々が(replaceFirstという()メソッドなし)の文字列を更新せずに文字列にサブの発生を数えることができる任意のobject、唯一parameters

+0

ありがとうございます!それでおしまい。私は "交換"を使用したので、私のために働かなかった。私は "replaceFirst"があることを知らなかった。 – amaier

+0

@amaier確かに、 'replace()'はすべての出現を取り除きます、あなたは一つずつ削除する必要があります、投票について考えてみてください。 – azro

0

を必要としないことができ、staticすることができます。文字列はjavaで不変なので、replaceFirstは文字列を更新しないので、毎回新しい文字列を作成します。

public static int strCount(String str, String sub) { 
    return strCount(str, sub, 0); 
} 

public static int strCount(String str, String sub, int offset){ 
    int index ; 
    if((index = str.indexOf(sub, offset))>=0){ 
     return strCount(str, sub, index+1)+1; 
    } 
    return 0; 
} 
関連する問題