<LC刷题二>回文字符串判断之leetcode125&234

 

  其他刷题记录见博客首页

 

1,leecode125 验证回文串

原题:

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

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

实例:

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

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

解决:

定义游标i j,i自左向右移动,j自右向左移动,判断字母数字i j是否相等即可

时间复杂度O(n)

空间复杂度O(1)

复制代码
class Solution {
    private boolean isAlphanumeric(char c){
        return ((c>='a'&& c<='z')||(c>='A'&&c<='Z')||(c>='0'&&c<='9'));
    }
    private boolean isEqualIgnoreCase(char a,char b){
        //小写字母a比大写字母A大32
        if (a>='A'&& a<='Z') a+=32;
        if (b>='A'&& b<='Z') b+=32;
        return a==b;
    }
    public boolean isPalindrome(String s){
        if (s==null||s.length()==0) return true;
        int i=0,j=s.length()-1;
        for (;i<j;++i,--j){
            //判断游标i,j是否为字符或数字,charAt(i)取i位置的字符,放在for循环里,把字符串遍历,取每个字符
            while (i<j&&!isAlphanumeric(s.charAt(i))) i++;
            while (i<j&&!isAlphanumeric(s.charAt(j))) j--;
            //判断每对i,j游标是否相等
            if (i<j&&!isEqualIgnoreCase(s.charAt(i),s.charAt(j))){
                return false;
            }

        }
        return true;

    }
}
复制代码

2, leetcode234 回文链表

题目:

请判断一个链表是否为回文链表。

实例:

输入: 1->2
输出: false

输入: 1->2->2->1
输出: true

解决:

 

定义指向当前节点的cur,和指向前一节点的pre,for循环限定执行1/2 length次,由于cur改变指向后单链表就断了,所以把cur.next下一节点存储起来。

cur指向前一节点pre,pre移到cur位置,cur移到next位置,判断长度是否为奇数,否则cur继续移动一位,pre和cur各自向俩头移动进行比较是否相同

(链表中next为指向下一节点的指针)

复制代码
class Solution {
    public boolean isPalindrome(ListNode head) {
         int len=0;
     //反转一半的链表
for (ListNode p=head;p!=null;p=p.next,++len); ListNode cur =head; ListNode pre=null; for (int i=0;i<len/2;i++) { ListNode next = cur.next; cur.next = pre; pre = cur; cur = next; } if (len%2==1) cur=cur.next; for (;pre!=null&&cur!=null;cur=cur.next,pre=pre.next){ if (cur.val!=pre.val){ return false; } }return true; } }
复制代码

 

posted @   亲爱的不二999  阅读(379)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2017-03-04 redis中的事务
点击右上角即可分享
微信分享提示

目录导航