125 2021-3-30

LC 125 验证回文串

  1. 虽然是小问题但是要注意细节
  2. 有“.,.”连续不合法情况,故判断是否合法时需要使用while而不是if
  3. 有begin=0,end=1情况,begin++&&end–后会交错,故循环不能单纯使用==,应该使用<
// 最初的解决办法:重新开辟一个char[]、是否合法判断方法冗余
// 3 ms(93.34%) 38.3 MB(98.34%)
class Solution {
    public boolean isPalindrome(String s) {
        char[] a=s.toCharArray();
        int end=a.length-1;
        int begin=0;
        while(begin<end){
            while(begin<end && !right(a[begin]))begin++;
            while(begin<end && !right(a[end]))end--;
            if (Character.toLowerCase(a[begin])!=Character.toLowerCase(a[end]))return false;
            begin++;
            end--;
        }
        return true;
    }

    public boolean right(char a){
        return (a>='a'&& a<='z')||(a>='A'&& a<='Z')||(a>='0'&& a<='9');
    }
}

// 在原始字符串上操作 
// 3 ms(93.34%) 38.6 MB(52.56%)
// 利用到Character的一些操作
class Solution {
    public boolean isPalindrome(String s) {
        int begin=0;
        int end=s.length()-1;
        while(begin<end){
            while(begin<end && !Character.isLetterOrDigit(s.charAt(begin)))begin++;
            while(begin<end && !Character.isLetterOrDigit(s.charAt(end)))end--;
            if(Character.toLowerCase(s.charAt(begin))!=Character.toLowerCase(s.charAt(end)))return false;
            begin++;
            end--;
        }
        return true;
    }  
}
  • 在当前情况下,使用char[]反而空间占用更小;但在字符串更长时,在原字符串上操作应该会节省更多空间( O(1) vs O(|s|) )。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值