//判断一个字符是否是数字或者是字符
package Test;
import java.lang.*;
public class Test01 {
public static void main(String[] args) {
// create 2 int primitives cp1, cp2
int cp1, cp2;
// assign values to cp1, cp2
cp1 = 0x0033;//51
cp2 = 0x012b23;//76579 超出范围了
// create 2 boolean primitives b1, b2
boolean b1, b2;
/**
* check if cp1, cp2 represents letter/digit and
* assign results to b1, b2
*/
b1 = Character.isLetterOrDigit(cp1);
b2 = Character.isLetterOrDigit(cp2);
String str1 = "cp1 represents a letter/digit is " + b1;
String str2 = "cp2 represents a letter/digit is " + b2;
// print b1, b2 values
System.out.println(str1); //true
System.out.println(str2); //false
}
}
//从两边往中间判断 当然也可以从中间往两边
class Solution{
public:
bool isPalindrome(string s){
vector<char> charvector;
for(auto &c:s){
int i=(int)c;
if((i>=65&&i<=90)||(i>=48&&i<=57)){
charvector.push_back(c);
}else if(i>=97&&i<=122)
{ c=c-32;
charvector.push_back(c);
}
}
int k=charvector.size();
for(int j=0;j<k;j++){
if(charvector[j]!=charvector[k-1])
return false;
k--;
}
return true;
}
};
//从两边往中间判断
s=s.toLowerCase();
s=s.replaceAll("[^0-9a-zA-Z]", ""); //核心在于这里将字母全部小写 且将不是字母数字的全部换成""
char c[]=s.toCharArray();
int counthead=0,counttail=s.length()-1;
while(counthead<=s.length()-1&&counttail>=0){
if(c[counthead]!=c[counttail]) return false;
counthead++;
counttail--;
}
return true;
//使用bitset
class Solution {
public:
bool isPalindrome(string s) {
bitset<256> b;
for(auto &c:s){
int i=(int)c;
if((i>=65&&i<=90)){
b.flip(i);
}else if((i>=97&&i<=122)){
i=i-32;
b.flip(i);
}else if(i>=48&&i<=57){
b.flip(i);
}
}
return b.count()<=1;
}
};
//利用栈
根据栈的特性,可以将字符串全部压入栈,再依次将各个字符出栈,从而得到原来字符串的逆串,然后将逆串和原字符串进行比较