Leetcode面试经典150题-125.验证回文串

解法都在代码里,不懂就留言或者私信

class Solution {
    /**这题目感觉不是算法题,应该是考coding的细节点,比如如何判断两个字符是否equals(大小写要equals)
    空格要忽略,感觉就是纯coding,难道是为了考察细心?不说了,开始解题 */
    public boolean isPalindrome(String s) {
        /**题目规定至少有一个字符,所以我们这里扣一下长度为1的情况 */
        if(s.length() == 1) {
            /**就一个长度,管他是啥,都是回文*/
            return true;
        }
        /**这里也可以接着写.length==2判断是否相等,我就不写了,没必要*/
        /**我的习惯先转成字符数组然后用下标,你不想转就用charAt */
        char[] sArr = s.toCharArray();
        /**定义左右指针,使用双指针求解 */
        int left = 0;
        int right = sArr.length - 1;
        while(left <= right) {
            /**左边所有不是大小写字母和数字的都忽略*/
            while(left <= right && !(isChar(sArr[left]) || isNumber(sArr[left]))) {
                left ++;
            }
            /**右边所有不是大小写字母和数字的都忽略 */
            while(left <= right && !(isChar(sArr[right]) || isNumber(sArr[right]))) {
                right --;
            }
            /**可能前面++和--之后已经越界了,判断以下,这里也可以写成left和right都是大于等于0小于sArr.length */
            if(left > right) return true;
            /**不相等直接返回false结束 */
            if(!equals(sArr[left], sArr[right])) {
                return false;
            }
            /**相等左右指针各移动一步 */
            left ++;
            right --;
        }
        /**中间没有返回false,就验证成功了 */
        return true;
    }

    public boolean equals(char c1, char c2) {
        /**如果都是数字就判断== */
        if(isNumber(c1) && isNumber(c2)) {
            return c1 == c2;
        }
        /**如果一个为数字,另外一个为字母肯定是不相等的*/
        if(isNumber(c1) || isNumber(c2)) {
            return false;
        }
        /**剩下的就是两个字母的比较 */
        return c1 == c2 || Math.abs(c1 - c2) == 32;
    }
    /**判断是不是数字 */
    public boolean isNumber(char c) {
        return c >= '0' && c <= '9';
    }
    /**判断是不是大小写字母 */
    public boolean isChar(char c) {
        return c >= 'a' &&  c <='z' || (c >='A' && c <='Z');
    }
}

运行结果,不太满意

  • 13
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值