2017-11-12 24 views
1

現在、指定された文字列のいくつの文字列が何番目の文字であるかを調べようとしています。文字列のサブ文字列の数を計算する

ストリングaabaaが与えられると期待される出力がしかし私のコード出力あります。なぜ私はこれを解決するのに役立つことができますか?

マイコード:

function countPalindromesInString(s) { 
    let count = 0; 

    if (s === s.split('').reverse().join('')) { 
     count += 1; 
    } 

    let testStr = ''; 
    for (let i = 0; i < s.length; i++) { 
     testStr += s[i]; 

     if (testStr === testStr.split('').reverse().join('')) { 
      count += 1; 
     } 
    } 
    return count; 
} 
+0

見つかった文字列を印刷すると問題が表示されますか? – Fuhrmanator

+0

文字を任意の順序で組み合わせることができる場合は、まずすべての順列が必要です。あなたは左から右までしか働いていません。 – charlietfl

+0

@charlietfl文字列を逆順にしていたので、これは問題ではないでしょうか?そうではありませんか? –

答えて

2

私はあなたが期待する理由はわからない入力aabaaための出力。 私の考えでは、出力がでなければ、結果は: "aa"、 "aba"、 "aabaa"となるはずです。一度初めに、右もダブルカウントに完全な5文字の文字列を左からあなたのコードはここでしか、カウント:中

if (s === s.split('').reverse().join('')) { count += 1; }

、一度のforループの場合ため、I = 4

function countPalindromesInString(s) { 
    let count = 0; //or s.length if you chose to count single letters as palindrome 
    let subString; 

    for (let i = 1; i < s.length; i++) { 
     for(let j = 0; j < s.length - i; j++) { 
     subString = s.substring(j, j+i+1); 
     if(subString === subString.split('').reverse().join('')) { 
      count += 1; 
     } 
     } 
    } 
    return count; 
} 

その後編集:ここでは

は、あなたの質問を解決する

私たちはあなたの文字列にユニークな回文をカウントしたい場合は、私たちはアレイとするたびに、私たちで見つかった回文を保存することができます別のものを見つけたら、以前に追加されているかどうかを確認します:

function countPalindromesInString(s) { 
    let subStrings = []; 

    for (let i = 0; i < s.length; i++) { 
     for(let j = 0; j < s.length - i; j++) { 
     let subString = s.substring(j, j+i+1); 
     if(subString === subString.split('').reverse().join('') && !subStrings.includes(subString)) { 
      subStrings.push(subString); 
     } 
     } 
    } 
    return subStrings.length; 
} 
+0

あなたの答えをありがとう、私は出力が** 5 **であるべきであることを知りました。基本的に、私は別個のサブストリングを見つける必要があるので、繰り返しはありません。入力** aabaa **は** a、aa、aabaa、aba、b **である必要があります。したがって、出力** 5 **です。これを達成するためにあなたの答えを変更するにはどうすればいいですか? –

+0

見つかったすべての回文を配列に格納します。それらが一意であることを確認するために、新しく見つかったパリンドロームがアレイに以前に追加されたかどうかを確認してください。私は答えを編集し、あなたの問題に可能な解決法を加えました。 – Dragos

関連する問題