验证回文串——力扣125

本文介绍了一种使用Java编程语言判断字符串是否为回文串的方法,通过将字符串转为小写并移除非字母数字字符,利用字符数组操作,检查左右指针指向的字符是否相同,最终确定是否为回文串,时间复杂度为O(n)。
摘要由CSDN通过智能技术生成

题目

  • 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
  • 字母和数字都属于字母数字字符。
  • 给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 
  • 示例 1:
  • 输入: s = "A man, a plan, a canal: Panama"
    输出:true
    解释:"amanaplanacanalpanama" 是回文串。
    

基本思路

  1. String 类里面的 toLowerCase() 方法将字符串大写字母变小写
  2. String 类里面的 toCharArray() 方法将字符串装换为字符数组
  3. 创建一个新字符数组 newChars[],将原字符数组 chars[] 的字母与数字放进去
  4. 用一个指针 j 定位最后一个写入的位置
  5. 设置 flag 标志,默认值为 false
  6. 设置 left,right 指针分别指向数组最前面的数据和最后面的数据(注意这里最后面的位置是指针 j 的前一个)
  7. while 循环数组,每次循环 left 右移,right 左移
  8. left >=right 或者 left 指向的字符和 right 指向的字符不同结束循环
  9. left 与 right 指向不同字符而退出循环的话,left 必定小于 right
  10. 判断 left>right 为真则 flag=true

代码如下

public static boolean isPalindrome(String s) {
        // 字符串大写变小写
        char[] chars = s.toLowerCase().toCharArray();
        char[] newChars = new char[100000];
        // 放到新数组
        int j=0;
        for (int i = 0; i < chars.length; i++) {
            if ( (chars[i] >= 'A' && chars[i] <= 'Z') || (chars[i] >= 'a' && chars[i] <= 'z') || (chars[i] >= 48 && chars[i] <=57 )) {
                newChars[j] = chars[i];
                j++;
            }
        }
        boolean flag = false;
        int left=0, right=j-1;
        while( left < right ) {
            if ( newChars[left] == newChars[right] ) {
                left ++;
                right--;
            }else {
                break;
            }
        }
        if ( left >= right) {
            flag = true;
        }
        return flag;
    }

时间复杂度度:O(n)

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值