leetcode125. 验证回文串

题目描述:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false

思路:

一开始是想借助reverse翻转进行判断的,但是其中包含太多杂项,而自己又不会正则表达式,只好用遍历的方式。根据回文的特点,采用双指针前后同时遍历,有相同的字符就计数,最终左右遍历的计数相同则为回文串。遍历时先进行杂项排除,筛选除符合条件的字符。

class Solution {
    public boolean isPalindrome(String s) {
                s = s.toLowerCase();
		int left_nums = 0, right_nums = 0;
		int left_pointer = 0, right_pointer = s.length() - 1;
		int left_ascii = 0, right_ascii = 0;
		boolean left_legal, right_legal;
		while (left_pointer < right_pointer) {
            // 筛选字符
			left_ascii = s.charAt(left_pointer) - 0;
			right_ascii = s.charAt(right_pointer) - 0;
			left_legal = (left_ascii >= 48 && left_ascii <= 57)
					|| (left_ascii >= 65 && left_ascii <= 90)
					|| (left_ascii >= 97 && left_ascii <= 122);
			right_legal = (right_ascii >= 48 && right_ascii <= 57)
					|| (right_ascii >= 65 && right_ascii <= 90)
					|| (right_ascii >= 97 && right_ascii <= 122);
            // 判断字符
			if (left_legal == false) {
				left_pointer++; 
				continue;
			}
			if (right_legal == false) {
				right_pointer--; 
				continue;
			}
			if (left_ascii == right_ascii) {
				left_pointer++;
				left_nums++; // 左计数
				right_pointer--;
				right_nums++; // 右计数
			} else
				return false;
		}
		return left_nums == right_nums ? true : false;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值