题目描述
一个字符串从前往后读和从后往前读相等,只包括字母和数字。
示例:1
输入:"hello,how are you?u,oy。era w,oh,oll eh";
输出:true
示例:2
输入:"hello";
输出:false
题目解析
解题思路是先全部转换为小写,设定两个指针,一个从前往后读,一个从后往前读。
逐个匹配,遇到特殊字符跳过。
代码实现
public static boolean solution(String msg){
int start = 0,end = msg.length() - 1;
msg = msg.toLowerCase();
while (start < end) {
if (isDigitOrAphla(msg.charAt(start)) && isDigitOrAphla(msg.charAt(end))) {
if (msg.charAt(start) == msg.charAt(end)) {
start++;
end--;
continue;
}else {
return false;
}
}
if (!isDigitOrAphla(msg.charAt(start))) {
start++;
}
if (!isDigitOrAphla(msg.charAt(end))) {
end--;
}
}
if (start >= end) {
return true;
}else {
return false;
}
}
//判断是不是字母或者数字
private static boolean isDigitOrAphla(char p){
if ((p >= 'a' && p <= 'z')) {
return true;
} else if ((p >= 'A' && p <= 'Z')) {
return true;
} else if ((p >= '0' && p <= '9')) {
return true;
}else {
return false;
}
}
复杂度的计算
一共只有一个循环,最大循环了n/2次,所以时间复杂度为O(n),空间复杂度为O(1);