首页 > 解决方案 > 给定一个字符串,判断它是否是回文,只考虑字母数字字符并忽略大小写

问题描述

class Solution {
    public boolean isPalindrome(String s) {
        String str = s.toLowerCase();
        int count = 0;
        boolean isfalse = true;
      char arr[] = new char[str.length()];
        for(int i = 0;i<str.length();){
            if(!Character.isLetter(str.charAt(i))){
                i++;
            }else{
                arr[count] = str.charAt(i);
                count++;
                i++;
            }
        }
        for(int i = 0;i<arr.length;i++){
            int j = arr.length-count;
            if(arr[i]==arr[j]){
                isfalse = true;
            }
        }
        return false;
    }
}

谁能告诉我为什么我的代码不起作用,或者它是否可以与数组一起使用。任何帮助将不胜感激

标签: javapalindrome

解决方案


无论发生什么,您的代码都将始终返回 false。由于您没有使用定义的变量isFalse作为return语句。我将您的代码修改为最后一部分,即您的 for 循环并转换为 while 循环以使用双指针技术从两侧检查相等性。现在它看起来像下面这样。

public static boolean isPalindrome(String s) {
    String str = s.toLowerCase();
    int count = 0;
    char arr[] = new char[str.length()];
    for(int i = 0;i<str.length();){
        if(!Character.isLetter(str.charAt(i)) && !Character.isDigit(str.charAt(i))){
            i++;
        }else{
            arr[count] = str.charAt(i);
            count++;
            i++;
        }
    }
    int i = 0;
    int j = count - 1;
    while (i < j) {
        System.out.println(arr[i] + " : " + arr[j]);
        if (arr[i] != arr[j])
            return false;
        i++;
        j--;
    }
    return true;
}

尝试将这些添加到您的代码中,它应该可以工作。


推荐阅读