Advertisement

Java刷题:判断字符串是否是 回文

阅读量:

题目

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串

字母和数字都属于字母数字字符。

给你一个字符串 s,如果它是 回文串 ,返回 true __ ;否则,返回 __false __ 。

示例 1:

复制代码

思路

主要思路是判断左右两边的字母数字字符是否相同

  1. 先判断字符串中的每一个字符是不是字母数字字符
  2. 将大写字母转为小写字母
  3. 判断左右两边的字母数字字符是否相同

题解

字母数字字符判断
复制代码
 public boolean isNumberAndCharacter(char ch){

    
     if(Character.isDigit(ch) || Character.isLetter(ch)) {
    
         return true;
    
     }
    
     return false;
    
     }
    
    
    
    
    java
    
    

isDigit方法是用来判断字符是否是数字,isLetter方法是用来判断字符是否是字母。

转小写,判断相同
复制代码
 public boolean isPalindrome(String s){

    
     //字符串中的字母转为小写
    
     s =s.toLowerCase();  
    
     int left = 0;
    
     int right = s.length() - 1;
    
  
    
     //判断左右字符是否相同
    
     while(left < right){
    
         while(left < right && isNumberAndCharacter(s.charAt(left))){
    
             left++;
    
         }
    
         while(left < right && isNumberAndCharacter(s.charAt(right))){
    
             right--;
    
         }
    
         if(s.charAt(left) == s.charAt(right)){
    
             left++;
    
             right--;
    
         }else{
    
             return true;
    
         }
    
     }
    
     return false;
    
     }
    
    
    
    
    java
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/y4xAzWvVCaUfjQ3ku1G25qNeISDg.png)

一下,可以看到代码可以正常进行。

复制代码
 public class Main {

    
     public static void main(String[] args) {
    
     Solution solution = new Solution();
    
     System.out.println(solution.isPalindrome("abcdefg"));
    
     }
    
 }
    
    
    
    
    java
    
    

完整代码以下:

复制代码
 import java.util.Locale;

    
  
    
 class Solution{
    
     public boolean isNumberAndCharacter(char ch){
    
     if(Character.isDigit(ch) || Character.isLetter(ch)) {
    
         return true;
    
     }
    
     return false;
    
     }
    
  
    
     public boolean isPalindrome(String s){
    
     s =s.toLowerCase();  //字符串中的字母转为小写
    
     int left = 0;
    
     int right = s.length() - 1;
    
     while(left < right){
    
         while(left < right && isNumberAndCharacter(s.charAt(left))){
    
             left++;
    
         }
    
         while(left < right && isNumberAndCharacter(s.charAt(right))){
    
             right--;
    
         }
    
         if(s.charAt(left) == s.charAt(right)){
    
             left++;
    
             right--;
    
         }else{
    
             return true;
    
         }
    
     }
    
     return false;
    
     }
    
     
    
 }
    
 public class Main {
    
     public static void main(String[] args) {
    
     Solution solution = new Solution();
    
     System.out.println(solution.isPalindrome("abcdefg"));
    
     }
    
 }
    
    
    
    
    java
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/UmafdCjxoBO6ZATP7NtH8ciYGW5z.png)

全部评论 (0)

还没有任何评论哟~