题目描述
- 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
- 将空字符串定义为有效的回文串。
- 1 <= s.length <= 2 * 10^5
- 字符串 s 由 ASCII 字符组成
example input : "A man, a plan, a canal: Pana output : true input : "race a car" output : false input : "0p" output : false
解题思路
- 首先对字符串进行大小写转换,全部转成小写toLowerCase(也可以是大写toUpperCase),然后使用trim去掉空格,得到string。
思路1 for 循环
从0到string.length/2循环,比较下标 i 和对应下标 string.length - 1 - i 处元素是否相同。若否则直接return false,是则继续循环。
思路2 while 循环 原理同1
设置left = 0, right = string.length - 1, left 不断向右加1,right 不断向左减1,比较对应元素是否相同。若否则返回false,是则继续循环。
思路3 借助Java中字符串的reserve()方法
创建一个新的字符串 newString 为 string的反转串,此处借助reserve()方法。直接返回newString.equals(string)的判断结果。
代码(Java)
思路1代码
public class Solution1 {
public boolean isPalindrome(String s) {
s = s.toLowerCase().trim();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch >= 'a' && ch <= 'z') {
stringBuilder.append(ch);
} else if (ch >= '0' && ch <= '9') {
stringBuilder.append(ch);
}
}
int length = stringBuilder.length();
for (int i = 0; i < length / 2; i++) {
if (stringBuilder.charAt(i) != stringBuilder.charAt(length - 1 - i)) {
return false;
}
}
return true;
}
}
思路2代码
public class Solution3 {
public boolean isPalindrome(String s) {
String str = s;
str = str.toLowerCase().trim();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch >= 'a' && ch <= 'z') {
stringBuilder.append(ch);
} else if (ch >= '0' && ch <= '9') {
stringBuilder.append(ch);
}
}
int left = 0;
int right = stringBuilder.length() - 1;
while (left < right) {
if (stringBuilder.charAt(left++) != stringBuilder.charAt(right--)) {
return false;
}
}
return true;
}
}
思路3代码
public class Solution2 {
public boolean isPalindrome(String s) {
s = s.toLowerCase().trim();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch >= 'a' && ch <= 'z') {
stringBuilder.append(ch);
} else if (ch >= '0' && ch <= '9') {
stringBuilder.append(ch);
}
}
StringBuilder reserve = new StringBuilder(stringBuilder).reverse();
return reserve.toString().equals(stringBuilder.toString());
}
}
本文作者:
whtli
本文链接: https://hexo.whtli.cn/archives/2dfc3976.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
本文链接: https://hexo.whtli.cn/archives/2dfc3976.html
版权声明: 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。