判断题目给出的字符串是不是回文,仅考虑字符串中的字母字符和数字字符,并且忽略大小写
例如:"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; } }