[英]Can you help me explain this piece of code
我了解charAt部分,但其他部分遇到了麻煩。 這段代碼的其余部分您可以逐步向我解釋一下,以便我更清楚地理解。 謝謝
public static boolean y(String str) {
int i = 0;
int j = str.length()-1;
while (i != j && (j - i) != 1) {
if (str.charAt(i) != str.charAt(j))
{
return false;
}
i++;
j--;
}
return true;
}
opps我出錯了,while語句應該是>> >> while(i!= j &&(j-1)!= 1)
該代碼將確定str
是否為回文。
i
將從字符串的開始到中間代表每個字符。 j
將代表從字符串的結尾到中間的每個字符。
通過將值設置為0(第一個字符)來初始化i
。 j
初始化為字符串的長度減去1(最后一個字符)。
然后,您的代碼循環執行,比較由i
和j
表示的字符,直到它們不匹配,或者直到沒有要比較的字符為止。
例如,給定回文“ radar”,代碼可以進行比較:
然后終止。 在奇數回文中,顯然不需要比較中間字符,因此while
語句中的i != j
。
在處理等長回文時,您的代碼有問題。 i
和j
將交叉,但永遠不會相同。 第二個子句(j - i) != 1
似乎是為了解決這個問題而設計的,但是比較起來太早了!
給定回文“上拉”,當i
為2且j
為3(即兩個L)時,您將退出循環而不進行比較。 這意味着非回文偶數單詞應返回false時將返回true。
如果將整個where
子句更改為:
where (j - i > 0)
您的代碼將適用於所有情況。
它將字符串的開始(位置i)與字符串的結束(位置j)進行比較,然后遍歷下一對字符(i + 1,j-1),直到到達字符串的中間為止,以查看如果字符串是回文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.