2011-11-09 34 views
0

我剛剛在我的作業完成了一個問題,其目的是找到一個字符串內最長的迴文,所以如果你有一個字符串「hellomomomkk」,那麼它會返回媽媽這個給定字符串的最長迴文。這是爲什麼這個工作在Java和字符串長度

 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正是它所說的,如果子字符串是迴文返回true或false。我的問題是這個。爲什麼當我做

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

我的代碼工程??但如果我不

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

我的代碼被打破,如果字符串是「你好」,J將結束對但實際字符量0-4計數開始?那麼爲什麼< = code中沒有錯誤?爲什麼它工作?

回答

1
substring(i, j) 

j(第二個arg)被認爲是在該索引處的字符的左側。

因此,如果字符串是

"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

現在等待我感到困惑笑,做什麼你的意思是它排除了最終指數? – Matt

1

這是因爲當你做一個

s.substring(i, j) 

子串是從我直到Ĵ排除Ĵ所以如果

i = 0 
j = 5 

然後子將包含5個字符(如u所示),但是從0-4個索引(i:e 0,1,2,3,4)包含

like if i = 2 and j = 6 

子字符串將包含(j - I = 6-2)從4個字符索引2-index5(I:E 2,3,4,5)