提问人:Pasha Mohammed 提问时间:9/9/2023 更新时间:9/9/2023 访问量:59
使用 Array 检查给定的 String 是否是回文
Checking if the given String is Palindrome or not, using Array
问:
我已将来自读者的输入作为字符串,我想通过使用 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();
}
}
答:
根据您的编码,字符可以具有多个字节大小。
我建议你不要用反向字节数组来执行这项任务。
使用 .toCharArray() 方法从 String 中获取 char 数组。
字符串 s = “hello”; char[] chars = s.toCharArray();
评论
您不必提取单个字节。您可以使用该方法获取具有输入字符串的各个字符。然后,您可以反转它并从中构建一个新字符串。toCharArray
char[]
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 通过遵循与他们类似的方法来解决他们的问题。
您可以在此问题中了解有关其他解决方案的更多信息 - 检查回文字符串
您不需要创建反向数组,您可以修改现有的数组。
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)
评论