java实现回文验证_LeetCode 精选 TOP 面试题(Java 实现)—— 验证回文串
文章目錄
一、題目描述
1.1 題目
驗證回文串
給定一個字符串,驗證它是否是回文串,只考慮字母和數字字符,可以忽略字母的大小寫。
說明:本題中,我們將空字符串定義為有效的回文串。
示例 1:
輸入: "A man, a plan, a canal: Panama"
輸出: true
示例 2:
輸入: "race a car"
輸出: false
1.2 知識點
雙指針
1.3 題目鏈接
二、解題思路
2.1 解題思路
解題的思路比較簡單,首先將字符串中的非法字符(除 0-9 a-z A-z 以外的字符)替換掉,然后將大寫字母轉換為小寫字母,便于后續的比較,最后使用雙指針從從兩端向中間邊移動邊對比即可。
這里多說一句,其實也可以不進行預處理(將非法字符替換掉),可以在雙指針移動比較的過程中進行替換,這樣就可以在一遍遍歷的情況下完成驗證。還有就是對于評論中提供的方法二,代碼簡潔了很多,但是效率卻是方法一的十多倍,因此簡潔的代碼不意味著高效率。
三、實現代碼
3.1 代碼實現一(2ms)
class Solution {
public boolean isPalindrome(String s) {
char[] chars = s.toCharArray();
int start = 0, end = 0;
// 替換非法字符
for (int i = 0; i < chars.length; i++) {
if ((chars[i] >= '0' && chars[i] <= '9') || (chars[i] >= 'a' && chars[i] <= 'z'))
chars[end++] = chars[i];
else if (chars[i] >= 'A' && chars[i] <= 'Z')
chars[end++] = (char) (chars[i] - 'A' + 'a');
}
end--;
// 驗證回文串
while (start < end) {
if (chars[start] != chars[end]) return false;
start++;
end--;
}
return true;
}
}
3.2 代碼實現二(25ms)
class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0)
return true;
String str = s.replaceAll("[^0-9a-zA-Z]", "").toLowerCase();
for (int i = 0, j = str.length() - 1; i < j; i++, j--) {
if (str.charAt(i) != str.charAt(j))
return false;
}
return true;
}
}
楊小帆_
發布了256 篇原創文章 · 獲贊 32 · 訪問量 3萬+
私信
關注
標簽:面試題,Java,chars,解題,str,題目,代碼,TOP,回文
來源: https://blog.csdn.net/qq_40697071/article/details/103978208
總結
以上是生活随笔為你收集整理的java实现回文验证_LeetCode 精选 TOP 面试题(Java 实现)—— 验证回文串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比java好的_Java Spring真
- 下一篇: java filter 模式,Java设