125. 验证回文串

转载自Leet Code《剑指Offer》

题目描述

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。

示例 1: >输入: "A man, a plan, a canal: Panama" >输出: true

示例 2: >输入: "race a car" >输出: false

提示:

  • 1 <= s.length <= 2 * 105
  • 字符串 s 由 ASCII 字符组成

我的代码

\(T(N) = O(N)\), \(S(N) = O(1)\)

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class MySolution125 
{
public boolean isPalindrome(String s)
{
s = s.trim();
if (s==null||s.length()<=1) return true;

for (int i=0, j=s.length()-1; i<j; )
{
if (!Character.isLetterOrDigit(s.charAt(i)))
{
i++; continue;
}
else if (!Character.isLetterOrDigit(s.charAt(j)))
{
j--; continue;
}
else if (Character.isLetter(s.charAt(i))&&Character.isLetter(s.charAt(j)))
{
if (!(Character.toLowerCase(s.charAt(i))==Character.toLowerCase(s.charAt(j))))
return false;
}
else if (s.charAt(i)!=s.charAt(j))
return false;
i++; j--;
}
return true;
}
}