2011-11-09 6 views
0

私は宿題で問題を終了しましたが、これは文字列の中で最も長い回文を見つけることを目的としているので、 "hellomomomkk"という文字列があればmomomこの与えられた文字列の最長のパリンドローム。なぜこれはJavaとStringの長さで動作するのですか

 for(int i = 0; i < s.length(); i++) { 
     for(int j = i; j <= s.length(); j++) { 
      if(isPalindrome(s.substring(i, j))) { 
       if(s.substring(i, j).length() > longest.length()) { 
        longest = s.substring(i, j); 
       } 
      } 
     } 
    } 
    return longest; 

isPalindromeはまさにそのことです。部分文字列が回文であれば真または偽を返します。私の質問はこれです。なぜ私はそうですか

for(int j = i; j <= s.length(); j++) 

私のコードは動作しますか?私は

for(int j = i; j < s.length(); j++) 

を行う場合は私のコードが破壊され、文字列が「こんにちは」であれば、jはに終わるだろうが、文字の実際の量は4 0カウントから始まっていますか?だからなぜ< =コードにエラーがないのですか?それはなぜ機能するのですか?

答えて

1
substring(i, j) 

j(第2引数)は、そのインデックスの文字の左側にあるとみなされます。だから、

文字列はあなたが

s.substring(i, j) 

を行うときに

i = 0 
j = 5 

サブあれば私はjを除くJを耕しから部分がありますので

"A" 
"A".substring(0, 1); 

returns "A", as it ends before the character in slot 1 (which doesn't exist) 
+0

ああ!今私はそれを得る:)明確化のためにありがとう! – Matt

1

s.substring()は終了インデックスを除きます。

+0

は何をすべきか、笑私は混乱している今、待って(I 5、E 2、3,4)あなたはそれが終わりのインデックスを除外することを意味しますか? – Matt

1

ある場合5文字(uが言ったように)が含まれますが、0〜4のインデックス(i:e 0,1,2,3,4)

like if i = 2 and j = 6 

サブストリング(J - I = 6-2)が含まれます4つのINDEX2-index5から文字:

関連する問題