簡體   English   中英

你能幫我解釋一下這段代碼嗎

[英]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(最后一個字符)。

然后,您的代碼循環執行,比較由ij表示的字符,直到它們不匹配,或者直到沒有要比較的字符為止。

例如,給定回文“ radar”,代碼可以進行比較:

  • r與r
  • 一個與一個

然后終止。 在奇數回文中,顯然不需要比較中間字符,因此while語句中的i != j

在處理等長回文時,您的代碼有問題。 ij將交叉,但永遠不會相同。 第二個子句(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM