【编程】【leetcode】125.Valid Palindrome


//判断一个字符是否是数字或者是字符
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;
		
	}
};


//利用栈
根据栈的特性,可以将字符串全部压入栈,再依次将各个字符出栈,从而得到原来字符串的逆串,然后将逆串和原字符串进行比较





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值