проблема с методом палиндрома

#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 ");
}

}