解决如何验证一个字符串是否是回文字符串

博客围绕一个问题给出三种解决方式,并附上对应代码。还提及涉及的类和方法,如取字符串字符、判断字符类型、转换字母大小写以及字符串倒序等操作,均与算法相关。

问题:

验证一个字符串是否是回文字符串,只验证字符串中国的字母和数字,
字母不区分大小写。

解决方式一:

先去除掉字符串中的非字母和非数字,通过reverse()方法逆序得到另一个字符串
,若两个项目则是回文字符串;

代码一:

public boolean judge(String s1){
	StringBuffer sber = new StringBuffer();
	for(int i=0;i<s1.length;i++){
		char c = s1.charAt(i);
		if(Character.isLetterOrDigit(c){
			sber.append(Character.toLowerCase(c);
		}
	}
	StringBuffer s2 = new StringBuffer(sber).reverse();
    return sber.toString().equals(s2.toString());
}

解决方式二:

使用双指针,先刷选出非字母和数字,一个在字符串头部,一个在尾部,
直到两个指针相等;

代码二:

public boolean judge(String s1){
	StringBuffer sber = new StringBuffer();
	for(int i=0;i<s1.length;i++){
		char c = s1.charAt(i);
		if(Character.isLetterOrDigit(c){
			sber.append(Character.toLowerCase(c);
		}
	}
	int left = 0;
	int right = sber.length-1;
	while(left<right){
		if(Charater.toLowerCase(sber.charAt(left)) != Character.toLowerCase(sber.charAt(right))){
			return false;
		}
		++left;
		--right;
	}
	return true;
}

解决方式三:

双指针,分别在字符串左右,不筛选,直接在原字符串上比较,
遇到非字母和数字,则跳转下一个再比较;

代码三:

public boolean judge(String s1){
	StringBuffer sber = new StringBuffer();
	int left = 0;
	int right = s1-1;
	while(left<right){
		while(left<right && !Character.isLetterOrDigit(s1.charAt(left))){
			++left;
		}
		while(left<right && !Character.isLetterOrDigit(s1.charAt(right))){
			--right;
		}
		if(left<right){
			if(Charater.toLowerCase(sber.charAt(left)) != Character.toLowerCase(sber.charAt(right))){
			return false;
			}
			++left;
			--right;
		}
	}
	return true;
}

涉及类和方法:

String.charAt(int i): 取字符串中的某个字符

Chararter.isLetterOrDigit(char c):判断是否是数字或者字母

Character.toLowerCase(char c):把字母全部变为小写

StringBuffer.reverse():把字符串倒序

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值