leecode刷题-20200526-easy-125. 验证回文串

声明:
作者不是什么大佬,只是想写写算法,提高一下自己的内功。所以代码可能会非常凌乱,(大佬们就当个笑话看就可以了),但我会认真注释。


最后如果有路过的大佬,希望可以留下你们的建议和看法,谢谢!

125. 验证回文串

一、原题链接

125.验证回文串

二、题目介绍

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

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

三、测试用例

1.示例

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

2.示例

输入: “race a car”
输出: false

四、思路解析

在面对判断回文串的情况我一般会使用快慢指针的方式进行解答。

通过快慢指针快速定位到中点,之后从两端出发依此判断。
注意:这道题型简单会有更快速的方式,但是如果固定使用快慢指针解题,该题可以当作快慢指针的入门练习题

五、代码

class Solution {
    public boolean isPalindrome(String s) {
    	// 将字符串刷新到自定义链表
        int cha = 32;
        LinkedChar linkedChar = new LinkedChar();
        for (char c : s.toCharArray()) {
            if (c >= '0' && c <= '9' || c >= 'a' && c <= 'z') {
                linkedChar.push(c);
            } else if (c >= 'A' && c <= 'Z') {
                int temp = c + 32;
                linkedChar.push((char) temp);
            }
        }
	
		// 判断简单的情况,直接返回
        switch (linkedChar.size){
            case 0: return true;
            case 1: return true;
            case 2: return linkedChar.head.value == linkedChar.head.next.value;
            case 3: return linkedChar.head.value == linkedChar.head.next.next.value;
        }

		// 根据快慢指针获取中间元素
        LinkedElem fast = linkedChar.head;
        LinkedElem slow = linkedChar.head;
        while (fast.next!=null && fast.next.next !=null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        // 根据最后一次指针停留位置和链表长度,设置快慢指针的往左右遍历的位置
        if(linkedChar.size%2==0){
            fast = slow.next;
        }else {
            fast = slow.next;
            slow = slow.pre;
        }
		
		// 开始遍历
        while (fast!=null){
            if(fast.value != slow.value){
                // 有一次不一样就返回false
                return false;
            }else {
                fast = fast.next;
                slow = slow.pre;
            }
        }
        // 全部通过返回true
        return true;
    }
}

// 自定义Char类型的链表结构
class LinkedChar {
	// 当前链表头指针
    LinkedElem head;
    // 当前链表尾指针
    LinkedElem last;
    // 当前链表长度
    int size = 0;

	// 链表是否为空
    boolean isEmpty() {
        return size == 0;
    }

	// 链表添加
    void push(char c) {
        // 将要添加的字符封装为链表元素
        LinkedElem elem = new LinkedElem();
        elem.value = c;
        
		// 分情况添加 此时为空时添加元素
		if (size == 0) {
			// 更新链表的头尾指针
            this.head = elem;
            this.last = elem;
            elem.next = null;
            elem.pre = null;
        } else {
        	// 设定当前元素的前一个元素为尾部
            elem.pre = this.last;
            // 将当前元素放到尾部
            this.last.next = elem;
            // 跟新尾部的指针
            this.last = elem;
        }
        // 长度加1
        size++;
    }
}

// 链表元素
class LinkedElem {
    // 前指针
    LinkedElem pre;
    // 后指针
    LinkedElem next;
    // 当前元素
    char value;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1363157985066 13726230503 00-FD-07-A4-72-B8:CMCC 120.196.100.82 i02.c.aliimg.com 24 27 2481 24681 200 1363157995052 13826544101 5C-0E-8B-C7-F1-E0:CMCC 120.197.40.4 4 0 264 0 200 1363157991076 13926435656 20-10-7A-28-CC-0A:CMCC 120.196.100.99 2 4 132 1512 200 1363154400022 13926251106 5C-0E-8B-8B-B1-50:CMCC 120.197.40.4 4 0 240 0 200 1363157993044 18211575961 94-71-AC-CD-E6-18:CMCC-EASY 120.196.100.99 iface.qiyi.com 视频网站 15 12 1527 2106 200 1363157995074 84138413 5C-0E-8B-8C-E8-20:7DaysInn 120.197.40.4 122.72.52.12 20 16 4116 1432 200 1363157993055 13560439658 C4-17-FE-BA-DE-D9:CMCC 120.196.100.99 18 15 1116 954 200 1363157995033 15920133257 5C-0E-8B-C7-BA-20:CMCC 120.197.40.4 sug.so.360.cn 信息安全 20 20 3156 2936 200 1363157983019 13719199419 68-A1-B7-03-07-B1:CMCC-EASY 120.196.100.82 4 0 240 0 200 1363157984041 13660577991 5C-0E-8B-92-5C-20:CMCC-EASY 120.197.40.4 s19.cnzz.com 站点统计 24 9 6960 690 200 1363157973098 15013685858 5C-0E-8B-C7-F7-90:CMCC 120.197.40.4 rank.ie.sogou.com 搜索引擎 28 27 3659 3538 200 1363157986029 15989002119 E8-99-C4-4E-93-E0:CMCC-EASY 120.196.100.99 www.umeng.com 站点统计 3 3 1938 180 200 1363157992093 13560439658 C4-17-FE-BA-DE-D9:CMCC 120.196.100.99 15 9 918 4938 200 1363157986041 13480253104 5C-0E-8B-C7-FC-80:CMCC-EASY 120.197.40.4 3 3 180 180 200 1363157984040 13602846565 5C-0E-8B-8B-B6-00:CMCC 120.197.40.4 2052.flash2-http.qq.com 综合门户 15 12 1938 2910 200 1363157995093 13922314466 00-FD-07-A2-EC-BA:CMCC 120.196.100.82 img.qfc.cn 12 12 3008 3720 200 1363157982040 13502468823 5C-0A-5B-6A-0B-D4:CMCC-EASY 120.196.100.99 y0.ifengimg.com 综合门户 57 102 7335 110349 200 1363157986072 18320173382 84-25-DB-4F-10-1A:CMCC-EASY 120.196.100.99
06-09

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值