力扣L12--- 125验证回文串(java版)-2024年3月15日

1.题目

在这里插入图片描述

2.知识点

注1:在 Java 中,toString() 方法用于将对象转换为字符串表示形式。对于数组对象,toString() 方法将返回数组的字符串表示形式,其中包含数组中每个元素的字符串表示形式,以逗号分隔,并且包含在方括号中。
//toString 字符变成字符串

// 测试示例
        char[] s = {'H', 'e', 'l', 'L', 'o'};
        solution.toLowerCase(s);
        System.out.println(Arrays.toString(s));
         // 输出 ["h", "e", "l", "l", "o"]

注2:if (Character.isUpperCase(s[i])) // 检查字符是否为大写字符
s[i] = Character.toLowerCase(s[i]); // 将大写字符转换为小写字符

将字符数组中的所有大写字符转换为小写字符 步骤
用Character.isUpperCase(s[i])查找字符是不是大写的
再用Character.toLowerCase(s[i]) 将大写字符换成小写字符

注3:并移除所有非字母数字字符之后

Character.isLetterOrDigit(s[i]) 是 Java 中的一个方法调用,用于检查给定的字符 s[i] 是否是字母或数字字符。
具体来说,Character.isLetterOrDigit() 方法返回一个布尔值,表示给定的字符是否是字母或数字字符。如果字符是字母(大写或小写)或数字字符,则返回 true,否则返回 false。

import java.util.Arrays;

public class Solution {
    public static void main(String[] args) {
        char[] s = {'H', 'e', 'l', 'l', 'o', '!', '2', '#', 'w', 'o', 'r', 'l', 'd'};
        removeNonAlphanumeric(s);
        System.out.println(Arrays.toString(s)); // 输出 ["H", "e", "l", "l", "o", "2", "w", "o", "r", "l", "d"]
    }
    
    public static void removeNonAlphanumeric(char[] s) {
        int count = 0;
        for (int i = 0; i < s.length; i++) {
            if (Character.isLetterOrDigit(s[i])) {
              
            }
        }
        Arrays.fill(s, count, s.length, '\0'); // 将剩余部分填充为'\0',可选操作,不影响结果
    }
}

注4:**count++ 是一个后缀递增操作符。它的作用是先将 count 的当前值用于赋值给 s[i],然后再将 count 的值递增 1。**这样,s[i] 就被赋值为 s[count] 的当前值,然后 count 递增,指向下一个位置。
所以,s[count++] = s[i] 的含义是将字符数组 s 中的第 i 个位置的字符赋值给 s 中的第 count 个位置,并将 count 递增。这样就实现了将字母或数字字符移到数组的前面。

注5:Java 中的字符串是不可变的,所以您不能直接对字符串进行修改。需要使用 StringBuilder 或者其他可变的数据结构来实现字符串的修改操作。
Character.isUppercase(s[i]) 是错误的方法调用,应该是 Character.isUpperCase(s.charAt(i))。
Character.isLetterorDigit(s[i]) 也是错误的方法调用,应该是 Character.isLetterOrDigit(s.charAt(i))。
Character.toLowecase(s[i]) 是错误的方法调用,应该是 Character.toLowerCase(s.charAt(i))。
cnt[i++]=s[i] 是错误的用法,因为 cnt 应该是一个整数变量,而不是数组。

注6:for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isLetterOrDigit(ch)) {
sb.append(Character.toLowerCase(ch));
}
}

        StringBuilder sb = new StringBuilder();

        // 将字符串转换为只包含字母数字字符的形式,并转换为小写
        for (char ch : s.toCharArray()) {
            if (Character.isLetterOrDigit(ch)) {
                sb.append(Character.toLowerCase(ch));
            }
        }

注6:回文串用左右指针,然后再用charAt()方法

3.代码实现

class Solution {
    public boolean isPalindrome(String s) {
        
       StringBuilder sb=new StringBuilder();//StringBuilder存储的是可变的字符结构
        for(int i=0;i<s.length();i++)//将所有大写字符转换为小写字符、并移除所有非字母数字字符之后
        {
            char ch=s.charAt(i);//字符
            if(Character.isLetterOrDigit(ch))//判断是不是字符
           { sb.append(Character.toLowerCase(ch));}
            
        }

        //判断是不是回文串
        int left=0;//左指针指向起始位置
        int right=sb.length()-1;//右指针指向末尾位置
        while(left<right)
        {
         if(sb.charAt(left)!=sb.charAt(right))
         {
            return false;
         }
         left++;
         right--;
        }
        return true;


    }
}
  • 19
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值