這是一個簡單的問題,描述為:
如果一個短語在將所有大寫字母轉換為小寫字母並刪除所有非字母數字字元後,向前和向後讀取相同的內容,則該短語是回文。字母數字字元包括字母和數字。
給定一個字串 s,如果它是回文則傳回 true,否則傳回 false。
範例1:
輸入:s =「一個人,一個計劃,一條運河:巴拿馬」
輸出:true
說明:「amanaplanacanalpanama」是回文。範例2:
輸入:s =「賽車」
輸出:假
說明:「raceacar」不是回文。範例3:
輸入:s = " "
輸出:true
解釋:s 是刪除非字母數字字元後的空字串 ""。
由於空字串向前和向後讀取相同,因此它是回文。限制:
1
s 僅包含可列印的 ASCII 字元。
在回文之後,您基本上刪除所有非 alpha,然後呼叫降低大小寫方法並進行恢復以進行比較。
用方法和一些 reg exp 你可以用 3 行解決這個問題:
class Solution { public boolean isPalindrome(String s) { final String reduced = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase(); final String inverted = new StringBuilder(reduced).reverse().toString(); return reduced.equals(inverted); } }
運行時間:15 毫秒,比 Valid Palindrome 的 Java 線上提交的 22.51% 快。
記憶體使用:44.8 MB,低於有效回文 Java 線上提交的 34.15%。
作為簡單而簡單的問題,這應該足夠了,但是為了獲得更好的性能,您可以迭代並檢查每個字元並根據需要刪除和調整,對於這種情況,請查看leetcode 上的saksham 答案(如果您希望我詳細解釋) ,請在下面評論)。
—
就是這樣!如果還有什麼要討論的,請隨時發表評論,如果我錯過了任何內容,請告訴我,以便我進行相應更新。
直到下一篇文章! :)
以上是Leetcode——頂尖訪談——。有效回文的詳細內容。更多資訊請關注PHP中文網其他相關文章!