#java
#java
Вопрос:
Привет, я пытаюсь написать метод палиндрома, но получаю неправильные результаты
public static boolean isPalindrome(String input){
int b=input.length();
int []array=new int[b];
for(int i=0;i<array.length;i ){
array[i]=Integer.parseInt(input);}
for(int i=0;i<(array.length)/2;i ){
if(!(array[i]==array[array.length-1-i])){
return false;}
}
return true;
}
}
Комментарии:
1. Какие тестовые примеры вы используете? Вы получаете неправильные результаты во всех тестовых примерах или только в некоторых из них? Имеют ли тестовые примеры, которые завершаются неудачей, что-то общее?
Ответ №1:
Если вы поместите строку в StringBuilder
вы можете использовать .reverse()
метод. затем просто проверьте, равны ли 2.
StringBuilder input = new StringBuilder("helloolleh");
StringBuilder value = input.reverse();
if(value.toString().equals(input.toString()){
//process
}
Комментарии:
1. Не оптимально с точки зрения времени выполнения
2. @chrislegend хотя есть кое-что, что нужно сказать для удобства чтения, в зависимости от того, как часто будет использоваться функция
3. Согласен, но я бы предпочел быстрый алгоритм с несколькими комментариями читаемому в любой день. Как вы сказали, это зависит от использования, так что в некоторых отношениях это хороший ответ.
4. @chrislegend если вы запускаете этот метод несколько раз, это не так уж и важно, но я согласен, как только вы достигнете более высоких частот, другой алгоритм будет лучше
Ответ №2:
Вы можете использовать более простой метод для проверки наличия палиндрома.
Используйте класс StringBuilder и используйте .reverse()
метод для обратного преобразования строки, а затем проверьте наличие теста на палиндром.
StringBuilder value1= new StringBuilder("nitin");
StringBuilder value2 = input.reverse();
if(value1.toString().equals(value2.toString()){
System.out.println("This is a palindrome string ..");
}
Или вы также можете пойти этим путем..
public static boolean isPalindrome(String word) {
int left = 0;
int right = word.length() -1;
while (left < right) {
if (word.charAt(left) != word.charAt(right)) {
return false;
}
left ;
right--;
}
return true;
}
Ответ №3:
Не уверен, почему вы используете Integer.Parse()
.
Попробуйте что-то подобное (в основном следуя логике вопроса)
public static boolean isPalindrome(String input) {
char[] array = input.toCharArray();
for (int i = 0; i < (array.length) / 2; i ) {
if (!(array[i] == array[array.length - 1 - i])) {
return false;
}
}
return true;
}
Комментарии:
1. спасибо, но не могли бы вы, пожалуйста, сказать мне, почему метод, который я написал, не сработал
Ответ №4:
Вы можете использовать два «указателя», один из которых начинается с начала строки, а другой — с конца, и перемещать их в противоположных направлениях, проверяя, что символы равны; как только вы обнаружите разницу, вы будете знать, что ваша строка не является палиндромной; и наоборот, если вы не найдете различий, вы будете знать, что строка является палиндромной:
public static boolean isPalindome(String input) {
char[] cs = input.toCharArray();
for (int i = 0, j = cs.length - 1; i < j; i , j--) {
if (cs[i] != cs[j])
return false;
}
return true;
}
Ответ №5:
import java.util.Scanner;
public class Test_String {
private static boolean IsPalindrome(String s)
{
StringBuffer str1 = new StringBuffer(s);
StringBuffer str2 = str1.reverse();
if(s.equalsIgnoreCase(str2.toString()))
return true;
else
return false;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter a String to be checked as Palindrome ");
String in = scan.nextLine();
if(IsPalindrome(in))
System.out.println("nEntered String is a Palindrome ");
else
System.out.println("nEntered String is NOT a Palindrome ");
}
}