Создание рекурсивного метода для палиндрома

Я пытаюсь создать программу Palindrome с 9X_jre использованием рекурсии в Java, но я застрял, это 9X_jre то, что у меня есть на данный момент:

 public static void main (String[] args){
 System.out.println(isPalindrome("noon"));
 System.out.println(isPalindrome("Madam I'm Adam"));
 System.out.println(isPalindrome("A man, a plan, a canal, Panama"));
 System.out.println(isPalindrome("A Toyota"));
 System.out.println(isPalindrome("Not a Palindrome"));
 System.out.println(isPalindrome("asdfghfdsa"));
}

public static boolean isPalindrome(String in){
 if(in.equals(" ") || in.length() == 1 ) return true;
 in= in.toUpperCase();
 if(Character.isLetter(in.charAt(0))
}

public static boolean isPalindromeHelper(String in){
 if(in.equals("") || in.length()==1){
  return true;
  }
 }
}

Может 9X_j2se ли кто-нибудь предложить решение моей проблемы?

5
2

  • Многие дубликаты или почти дубликаты из поиска SO для палиндрома: h ...
7
Общее количество ответов: 7

Ответ #1

Ответ на вопрос: Создание рекурсивного метода для палиндрома

Вот я вставляю для вас код:

Но я настоятельно 9X_javax рекомендую вам узнать, как это работает,

из 9X_java-libraries вашего вопроса, вы совершенно нечитаемы.

Попытайтесь 9X_.java разобраться в этом коде. Прочтите комментарии из кода

import java.util.Scanner;
public class Palindromes
{

    public static boolean isPal(String s)
    {
        if(s.length() == 0 || s.length() == 1)
            // if length =0 OR 1 then it is
            return true; 
        if(s.charAt(0) == s.charAt(s.length()-1))
            // check for first and last char of String:
            // if they are same then do the same thing for a substring
            // with first and last char removed. and carry on this
            // until you string completes or condition fails
            return isPal(s.substring(1, s.length()-1));

        // if its not the case than string is not.
        return false;
    }

    public static void main(String[]args)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("type a word to check if its a palindrome or not");
        String x = sc.nextLine();
        if(isPal(x))
            System.out.println(x + " is a palindrome");
        else
            System.out.println(x + " is not a palindrome");
    }
}

35
2

  • Ой, я буквально впервые захожу ...

Ответ #2

Ответ на вопрос: Создание рекурсивного метода для палиндрома

Хорошо:

  • Непонятно, почему у вас есть два метода с одинаковой сигнатурой. Для чего они предназначены?
  • Почему при первом методе вы проверяете наличие одного пробела или любого отдельного символа?
  • Возможно, вы захотите обобщить условие прекращения на «если длина меньше двух».
  • Подумайте, как вы хотите использовать рекурсию. Один вариант:
    • Убедитесь, что первая буква равна последней букве. Если нет, верните false.
    • Теперь возьмите подстроку для эффективного удаления первой и последней букв и рекурсии.
  • Это упражнение в рекурсии? Это, безусловно, один способ сделать это, но это далеко не единственный способ.

Я не собираюсь сейчас объяснять это 9X_java-se более четко, потому что подозреваю, что 9X_javax это домашнее задание - действительно, некоторые 9X_recursion могут посчитать указанную выше помощь слишком 9X_java большой (я, конечно, немного сомневаюсь). Если 9X_openjdk у вас возникли проблемы с указанными выше 9X_javax советами, обновите свой вопрос, чтобы показать, как 9X_recursive далеко вы продвинулись.

5
1

  • @Nightshifterx: Для меня это звучит как домашнее задание :) ...

Ответ #3

Ответ на вопрос: Создание рекурсивного метода для палиндрома

public static boolean isPalindrome(String in){
   if(in.equals(" ") || in.length() < 2 ) return true;
   if(in.charAt(0).equalsIgnoreCase(in.charAt(in.length-1))
      return isPalindrome(in.substring(1,in.length-2));
   else
      return false;
 }

Может вам понадобится что-то подобное. Не 9X_jre проверял, насчет строковых индексов не уверен, но 9X_javax это отправная точка.

4
1

  • Зачем вам нужен `in.equals (" ")`? (В этом случае длина в любом случае ...

Ответ #4

Ответ на вопрос: Создание рекурсивного метода для палиндрома

Я думаю, рекурсия - не лучший способ решить 9X_java-libraries эту проблему, но один рекурсивный способ, который 9X_recursive я вижу здесь, показан ниже:

String str = prepareString(originalString); //make upper case, remove some characters 
isPalindrome(str);

public boolean isPalindrome(String str) {
   return str.length() == 1 || isPalindrome(str, 0);
}

private boolean isPalindrome(String str, int i) {
       if (i > str.length / 2) {
      return true;
   }
   if (!str.charAt(i).equals(str.charAt(str.length() - 1 - i))) {
      return false;
   }
   return isPalindrome(str, i+1);
}

3
0

Ответ #5

Ответ на вопрос: Создание рекурсивного метода для палиндрома

Вот моя попытка:

public class Test {

    public static boolean isPalindrome(String s) {
        return s.length() <= 1 ||
            (s.charAt(0) == s.charAt(s.length() - 1) &&
             isPalindrome(s.substring(1, s.length() - 1)));
    }


    public static boolean isPalindromeForgiving(String s) {
        return isPalindrome(s.toLowerCase().replaceAll("[\\s\\pP]", ""));
    }


    public static void main(String[] args) {

        // True (odd length)
        System.out.println(isPalindrome("asdfghgfdsa"));

        // True (even length)
        System.out.println(isPalindrome("asdfggfdsa"));

        // False
        System.out.println(isPalindrome("not palindrome"));

        // True (but very forgiving :)
        System.out.println(isPalindromeForgiving("madam I'm Adam"));
    }
}

9X_openjdk

1
0

Ответ #6

Ответ на вопрос: Создание рекурсивного метода для палиндрома

public class palin
{ 
    static boolean isPalin(String s, int i, int j)
    {
        boolean b=true;
        if(s.charAt(i)==s.charAt(j))
        {
            if(i<=j)
                isPalin(s,(i+1),(j-1));
        }
        else
        {
            b=false;
        }
        return b;
    }
    public static void main()
    {
        String s1="madam";
        if(isPalin(s1, 0, s1.length()-1)==true)
            System.out.println(s1+" is palindrome");
        else
            System.out.println(s1+" is not palindrome");
    }
}

9X_java-api

1
0

Ответ #7

Ответ на вопрос: Создание рекурсивного метода для палиндрома

Некоторые коды содержат много строк. Вместо 9X_core-java создания подстроки, которая создает новый 9X_.java объект, мы можем просто передавать индексы 9X_.java в рекурсивных вызовах, как показано ниже:

private static boolean isPalindrome(String str, int left, int right) {
    if(left >= right) {
        return true;
    }
    else {
        if(str.charAt(left) == str.charAt(right)) {

            return isPalindrome(str, ++left, --right);
        }
        else {
            return false;
        }
    }
}


 public static void main(String []args){
    String str = "abcdcbb"; 
    System.out.println(isPalindrome(str, 0, str.length()-1));
 }

1
0