LeetCode刷题-- 双指针(回文)

双指针验证回文数字/回文字符串

9. 回文数

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:
输入: 121
输出: true

示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

class Solution {
    public boolean isPalindrome(int x) {
     String str = String.valueOf(x);
     int i = 0;
     int j = str.length()-1;
     for(i = 0 ;i<j; i++,j--){
         if(str.charAt(i) != str.charAt(j)){
             return false;
         }
     }
     return true;
    }
}

125. 验证回文字符串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。

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

示例 2:
输入: “race a car”
输出: false

class Solution {
    public boolean isPalindrome(String s) {
     //题目中需要忽略大小写
     //全部换成小写
      s = s.toLowerCase();
     //只考虑小写字母和数字
     //正则表达式:[^0-9a-z],代表除了0-9a-z以外的字符
     //[0-9a-z]代表0-9a-z的字符
      s =s.replaceAll("[^0-9a-z]","");
     int i = 0;
     int j = s.length()-1;
     for(i = 0; i<j; i++,j--){
         if(s.charAt(i) != s.charAt(j)){
             return false;
         }
     }
     return true;
}
}

680 . 反转字符串Ⅱ

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:
输入: “aba”
输出: True

示例 2:
输入: “abca”
输出: True
解释: 你可以删除c字符。

class Solution {
    public boolean validPalindrome(String s) {
        //双指针法
        int i = 0;
        int j = s.length()-1;
        for(i = 0; i<j; i++,j--){
            if(s.charAt(i) != s.charAt(j)){
                //这时判断删除一个字符能否组成回文串
                //需要调用方法来完成判断
                return isPalindrome(s,i+1,j) || isPalindrome(s,i,j-1);
            }
        }
        return true;
    }

    //功能:判断在区间【i,j】之间的字符串是否为回文字符串
    public boolean isPalindrome(String s , int i, int j){
        for(; i<j ; i++,j--){
            if(s.charAt(i) != s.charAt(j)){
                return false;
            }
        }
        return true;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值