判断题目给出的字符串是不是回文,仅考虑字符串中的字母字符和数字字符,并且忽略大小写
例如:"nowcoder Is Best tsebsi: redoc won"是回文
"race a car"不是回文
注意:
你有没有考虑过字符串可能为空?这是面试时应该提出的一个好问题。
针对这个问题,我们定义空字符串是回文
"nowcoder Is Best tsebsi: redoc won"
true
"race a car"
false
public static boolean isPalindrome(String s) {
if(s.isEmpty()) return true;
String str = s.replaceAll("\\W", ""); // 使用正则去除非字符数字的字符
str = str.toLowerCase();
for(int i = 0; i < str.length(); i++) {
if(str.charAt(i) != str.charAt(str.length() - i -1)) {
return false;
}
}
return true;
}
//利用栈,入栈顺序和出栈顺序应一致
import java.util.*;
public class Solution {
public boolean isPalindrome(String s) {
Stack stack=new Stack();
String s1=s.replaceAll("\\W","").toUpperCase();
if(s1.isEmpty()||s1.length()==1)
return true;
for(int i=0;i<s1.length();i++){
stack.push(s1.charAt(i));
}
for(int i=0;i<s1.length();i++){
char c=(char)stack.pop();
if(s1.charAt(i)!=c)
return false;
else if(i==s1.length()-1){
return true;
}
}
return false;
}
} class Solution {
public:
bool isPalindrome(string s) {
int len = s.length();
int i = 0;
int j = len-1;
while(i < j){
if(!isalnum(s[i])){
++i;
continue;
}
if(!isalnum(s[j])){
--j;
continue;
}
if(tolower(s[i]) == tolower(s[j])){
++i;
--j;
}else{
return false;
}
}
return true;
}
};
public class Solution {
public boolean isPalindrome(String s) {
s = s.toUpperCase();
int i = 0, j = s.length() - 1;
while(i < j){
while((i < j) && !isalnum(s.charAt(i))) i++;
while((i < j) && !isalnum(s.charAt(j))) j--;
if(i <= j && s.charAt(i) == s.charAt(j)){
i++;
j--;
}else{
return false;
}
}
return true;
}
public boolean isalnum(char c){
return Character.isDigit(c) || Character.isLetter(c);
}
} //思路是把非数字和字母排除,最后判断是否回文
bool isPalindrome(string s) {
// write code here
if(s.length()==0)
return true;
// write code here
for(int i=0;i<s.length();i++)
{
if('a'<=s[i]<='z'|| '0'<= s[i] <='9');
else if('A' <= s[i] <= 'Z')
s[i] = s[i] + 32;
else
s.erase(s[i]);
}
return s==string(s.rbegin(),s.rend());
}
我这个“a.”通不过,搞不太懂了。
运行时间:165ms
占用内存:16564k
*/ public boolean isPalindrome(String s) {
int start=0;
int end = s.length()-1;
while(start<=end){
char p = s.charAt(start);
char l = s.charAt(end);
if (!isChar(p)){
start++;
continue;
}
if (!isChar(l)){
end--;
continue;
}
if (Character.toLowerCase(p)!=Character.toLowerCase(l)){
return false;
}
start++;
end--;
}
return true;
}
private boolean isChar(char c){
if ((c>='0'&&c<='9')||(c>='a'&&c<='z')||(c>='A'&&c<='Z')){
return true;
}
return false;
}
class Solution {
public:
string fil(string s,int l)
{
string out="";
for(int i=0;i<l;i++)
{
if(s[i]>='a'&&s[i]<='z')
out+=s[i]-32;
else if((s[i]>='A'&&s[i]<='Z')||(s[i]>='0'&&s[i]<='9'))
out+=s[i];
}
return out;
}
bool isPalindrome(string s) {
int l=s.length();
if(l==0)
return false;
if(l==1)
return true;
string s1=fil(s,l);
l=s1.length();
for(int i=0;i<l/2;i++)
{
if(s1[i]!=s1[l-1-i])
return false;
}
return true;
}
};
class Solution {
public:
bool isPalindrome(string s) {
if(s=="") return true;
string tmp="",rev="";
for(int i=0;i<s.length();i++)
if('A'<=s[i]&&s[i]<='Z') tmp+=(char)(s[i]-'A'+'a');
else if('a'<=s[i]&&s[i]<='z'||'0'<=s[i]&&s[i]<='9') tmp+=s[i];
rev=tmp;
reverse(rev.begin(),rev.end());
return rev==tmp;
}
};
/*
给定一个字符串,确定它是否是回文,只考虑字母数字字符和忽略例。
例如
“A man, a plan, a canal: Panama”一是一个回文。
“race a car”不是回文。
注:
你认为字符串可能是空的吗?这是面试时要问的一个好问题。
对于这一问题的目的,我们定义了空字符串作为有效的回文。
*/
//分析:从两头往中间扫
class Solution {
public:
bool isPalindrome(string s) {
transform(s.begin(),s.end(),s.begin(),::tolower);
auto left=s.begin(),right=prev(s.end());
while(left<right){
if(!::isalnum(*left))
++left;
else if(!::isalnum(*right))
--right;
else if(*left!=*right)
return false;
else{
left++;
right--;
}
}
return true;
}
}; public class Solution {
public boolean isPalindrome(String s) {
String str = s.replaceAll("[^\\w]","");//采用正则表达式,完美解决问题
if(str.length()==0||str.length()==1){
return true;
}
String ss = str.toLowerCase();
int n = (ss.length()-1)/2;
for(int i=0;i<=n;i++){
if(ss.charAt(i)!=ss.charAt(ss.length()-1-i)){
return false;
}
}
return true;
}
}
class Solution {
public:
bool isPalindrome(string s)
{
int left = 0, right = s.length()-1;
while(left<right)
{
if(!isalnum(s[left])) left++;
else if(!isalnum(s[right])) right--;
else if(tolower(s[left++]) != tolower(s[right--]))
return false;
}
return true;
}
};
public class Solution {
public boolean isPalindrome(String s) {
if(s == null || s.length() == 0)
return true;
int i = 0, j = s.length() - 1;
while(i < j && i < s.length() && j >= 0){
while(i < j && (!Character.isAlphabetic(s.charAt(i))
&& !Character.isDigit(s.charAt(i))))
i++;
while(i < j && (!Character.isAlphabetic(s.charAt(j))
&& !Character.isDigit(s.charAt(j))))
j--;
if(i < j && Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j)))
return false;
i++;
j--;
}
return true;
}
}
public class Solution {
public static boolean isPalindrome(String s) {
int i = 0;
int j = s.length() - 1;
while (i < j) {
while (i < j && ! (Character.isDigit(s.charAt(i)) || Character.isLetter(s.charAt(i))))
i ++;
while (i < j && ! (Character.isDigit(s.charAt(j)) || Character.isLetter(s.charAt(j))))
j --;
if(i < j && Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))) return false;
i ++;
j --;
}
return true;
}
}
package go.jacob.day726;
/**
* 125. Valid Palindrome
*
* @author Jacob
*
*/
public class Demo1 {
/*
* 476 / 476 test cases passed. Status: Accepted Runtime: 9 ms
*/
public boolean isPalindrome(String s) {
if (s.isEmpty()) {
return true;
}
//申请两个指针
int left = 0, right = s.length() - 1;
char cLeft, cRight;
while (left < right) {
cLeft = s.charAt(left);
cRight = s.charAt(right);
//Character有现成的isLetterOrDigit()方法,所以不需要自己编写相应函数
if (!Character.isLetterOrDigit(cLeft))
left++;
else if (!Character.isLetterOrDigit(cRight))
right--;
else {
if (Character.toLowerCase(cLeft) != Character.toLowerCase(cRight))
return false;
left++;
right--;
}
}
return true;
}
}