• 力扣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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    注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',可选操作,不影响结果
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    注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));
                }
            }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注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;
    
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    kali渗透测试_HTTPS攻击
    group_concat多行合并成一行
    商业精英的首选
    逐鹿澳洲市场 宁德时代储能全场景解决方案亮相澳大利亚全能源展
    docker部署zabbix 6.0高可用集群实验
    数据库及ADO.NET学习(五)
    嵌入式设备文件系统构建——增加用户登录功能
    刚毕业被骗去了小公司,天天“取数做表”,后悔没早点用上这工具
    【OpenCV图像处理12】特征检测与匹配
    如何给视频加水印标记?分享三个好用方法给你
  • 原文地址:https://blog.csdn.net/zsysingapore/article/details/136750689