题目来源:https://leetcode.com/problems/valid-palindrome/
题目难度:Easy
题目
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
1 2
| Input: "A man, a plan, a canal: Panama" Output: true
|
Example 2:
1 2
| Input: "race a car" Output: false
|
分析
只考虑字母和数字。忽略大小写。
解答1[Java]:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public boolean isPalindrome(String s) { char[] charMap = new char[256]; for (int i = 0; i < 10; i++) { charMap['0' + i] = (char) (1 + i); } for (int i = 0; i < 26; i++) { charMap['a' + i] = charMap['A' + i] = (char) (11 + i); }
for (int start = 0, end = s.length() - 1; start < end; ) { if (charMap[s.charAt(start)] == 0) { start++; } else if (charMap[s.charAt(end)] == 0) { end--; } else if (charMap[s.charAt(start++)] != charMap[s.charAt(end--)]) { return false; } } return true; } }
|
思路
先打一个表。
注意:通过 charMap['A']
这种方式访问数组元素的时候,Java 会自动把 []
中的字符转换为 int
型。
解答2[Java]:
1 2 3 4 5 6 7
| public class Solution { public boolean isPalindrome(String s) { String actual = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase(); String rev = new StringBuffer(actual).reverse().toString(); return actual.equals(rev); } }
|
使用正则表达式和 Java 的类库。先把所有字母都转换成小写,反转字符串然后对比。
其他
发现 Java 的连等赋值好像比非连等赋值性能要更好一些。