簡體   English   中英

Java中的字符串回文檢查器不起作用?

[英]String palindrome checker in java not working?

我正在嘗試為這些指令編寫程序:

給定一個字符串,請僅考慮字母數字字符並忽略大小寫,從而確定它是否是回文。 注意:針對此問題,我們將空String定義為有效回文。 https://leetcode.com/problems/valid-palindrome/

由於某種原因,最后一行中的.reverse()不會將其反轉。 我已經嘗試通過添加打印語句進行調試,並且發現字符串確實在更早的時候反轉了。 這里發生了什么? 請指導我!

public static boolean isPalindrome(String s) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        if (Character.isLetter(s.charAt(i))) {
            sb.append(s.charAt(i));
        }
    }
    String x = sb.reverse().toString();
    System.out.println(x);
    if (sb.length() == 0) 
        return true;
    else 
        return sb.toString().equals(x);
}

問題是reverse()更改StringBuilder本身。 因此,您正在比較反向,再次與反向。 而是將方法更改為:

String x = sb.toString();
return sb.reverse().toString().equals(x);

它將反轉之前StringBuilder與反轉的StringBuilder 請注意, if(sb.length == 0)不是必需的,就好像它是空的一樣, sb.reverse().toString().equals(x)仍將返回true。

當問題陳述指出無論大小寫均應匹配時,搜索也區分大小寫。 更改附加到的位置:

if (Character.isLetter(s.charAt(i))) {               
     sb.append(Character.toLowerCase(s.charAt(i)));
}

您還可以利用replaceAlltoLowerCase()將方法縮短為:

public static boolean pali(String s) {
    String copy = s.toLowerCase().replaceAll("[^a-z]", "");
    return new StringBuilder(copy).reverse().toString().equals(copy);       
}

因為在第一次調用sb.reverse() sb更改了它的狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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