双指针验证回文数字/回文字符串
9. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
class Solution {
public boolean isPalindrome(int x) {
String str = String.valueOf(x);
int i = 0;
int j = str.length()-1;
for(i = 0 ;i<j; i++,j--){
if(str.charAt(i) != str.charAt(j)){
return false;
}
}
return true;
}
}
125. 验证回文字符串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
class Solution {
public boolean isPalindrome(String s) {
//题目中需要忽略大小写
//全部换成小写
s = s.toLowerCase();
//只考虑小写字母和数字
//正则表达式:[^0-9a-z],代表除了0-9a-z以外的字符
//[0-9a-z]代表0-9a-z的字符
s =s.replaceAll("[^0-9a-z]","");
int i = 0;
int j = s.length()-1;
for(i = 0; i<j; i++,j--){
if(s.charAt(i) != s.charAt(j)){
return false;
}
}
return true;
}
}
680 . 反转字符串Ⅱ
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: “aba”
输出: True
示例 2:
输入: “abca”
输出: True
解释: 你可以删除c字符。
class Solution {
public boolean validPalindrome(String s) {
//双指针法
int i = 0;
int j = s.length()-1;
for(i = 0; i<j; i++,j--){
if(s.charAt(i) != s.charAt(j)){
//这时判断删除一个字符能否组成回文串
//需要调用方法来完成判断
return isPalindrome(s,i+1,j) || isPalindrome(s,i,j-1);
}
}
return true;
}
//功能:判断在区间【i,j】之间的字符串是否为回文字符串
public boolean isPalindrome(String s , int i, int j){
for(; i<j ; i++,j--){
if(s.charAt(i) != s.charAt(j)){
return false;
}
}
return true;
}
}