使用 Array 检查给定的 String 是否是回文

Checking if the given String is Palindrome or not, using Array

提问人:Pasha Mohammed 提问时间:9/9/2023 更新时间:9/9/2023 访问量:59

问:

我已将来自读者的输入作为字符串,我想通过使用 Array 检查给定的输入字符串是否为回文。

首先,我将 String 作为“RacecaR”,我使用“getBytes()”字符串类方法将该字符串存储在“Bytes Array”中,然后我尝试使用“for-loop”来获得“Reverse Bytes Array”。之后,我想将反向字节数组存储到字符数组中,这样我就可以轻松检查给定的字符串是否是回文,但是在将反向字节数组存储到字符数组中时遇到了问题。谁能解决这个问题? 我知道我可以使用“String Buffer”类“reverse”方法轻松做到这一点,但我想使用“String”类进行检查。 代码如下:

public class ClassA {
    
    void meth1()
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the string to be checked to see if it's a palindrome.");
        String s = sc.next();
        byte rev[] = s.getBytes();
        for(int i = rev.length-1;i>=0;i--) 
            System.out.print(i);
        //char[] charArray = ?? //How to store bytesArray into charArray?
        
            //String res =  new String(char[]); 
            
        
            if(s.equals(res))
                System.out.println("It is a palendrome");
            else
                System.out.println("It is not a palendrome");
            
    }
    public static void main(String[] args) {
        new ClassA().meth1();
    }
}
Java 数组字符串 for 循环 if-statement

评论

0赞 David Weber 9/9/2023
根据您的编码,字符可以具有多个字节大小。我建议你不要用反向字节数组来执行这项任务。使用 method.toCharArray() 从 String 中获取 char 数组。
0赞 David Weber 9/9/2023
看看我在下面的答案。

答:

0赞 David Weber 9/9/2023 #1

根据您的编码,字符可以具有多个字节大小。

我建议你不要用反向字节数组来执行这项任务。

使用 .toCharArray() 方法从 String 中获取 char 数组。

字符串 s = “hello”; char[] chars = s.toCharArray();

评论

0赞 Reilas 9/9/2023
还有一个 char IntStream 可通过 String#chars 方法获得。
0赞 Thiyagu 9/9/2023 #2

您不必提取单个字节。您可以使用该方法获取具有输入字符串的各个字符。然后,您可以反转它并从中构建一个新字符串。toCharArraychar[]

Scanner sc = new Scanner(System.in);
System.out.println("Enter the string to be checked to see if it's a palindrome.");
String s = sc.next();
char[] arr = s.toCharArray();
int n = arr.length;

// Construct reversed char[]
char[] rev = new char[n];
for (int i = 0; i < arr.length; i++) {
    rev[i] = arr[n - i - 1];
}
String reversedString = new String(rev);

if (s.equals(reversedString)) {
    System.out.println("It is a palindrome");
}
else {
    System.out.println("It is not a palindrome");
}

注1:有更好的方法可以解决这个问题(使用O(1)空格)。这个答案有助于 OP 通过遵循与他们类似的方法来解决他们的问题。

您可以在此问题中了解有关其他解决方案的更多信息 - 检查回文字符串

1赞 Oleg Cherednik 9/9/2023 #3

您不需要创建反向数组,您可以修改现有的数组。

public static boolean isPalindrome(String str) {
    char[] buf = str.toCharArray();

    // reverse array
    for (int i = 0, j = str.length() - 1; i < j; i++, j--)
        swap(buf, i, j);

    return str.equals(new String(buf));
}

private static void swap(char[] arr, int i, int j) {
    char ch = arr[i];
    arr[i] = arr[j];
    arr[j] = ch;
}

但是,如果你再往上看,你会发现,里面已经包含一个数组。因此,要检查字符串是否为回文,您甚至不需要创建新的数组或字符串或修改数组。String

public static boolean isPalindrome(String str) {
    for (int i = 0, j = str.length() - 1; i < j; i++, j--)
        if (str.charAt(i) != str.charAt(j))
            return false;

    return true;
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)