Создание рекурсивного метода для палиндрома
Я пытаюсь создать программу 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 ли кто-нибудь предложить решение моей проблемы?
- Многие дубликаты или почти дубликаты из поиска SO для палиндрома: h ...
Ответ #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");
}
}
- Ой, я буквально впервые захожу ...
Ответ #2
Ответ на вопрос: Создание рекурсивного метода для палиндрома
Хорошо:
- Непонятно, почему у вас есть два метода с одинаковой сигнатурой. Для чего они предназначены?
- Почему при первом методе вы проверяете наличие одного пробела или любого отдельного символа?
- Возможно, вы захотите обобщить условие прекращения на «если длина меньше двух».
- Подумайте, как вы хотите использовать рекурсию. Один вариант:
- Убедитесь, что первая буква равна последней букве. Если нет, верните false.
- Теперь возьмите подстроку для эффективного удаления первой и последней букв и рекурсии.
- Это упражнение в рекурсии? Это, безусловно, один способ сделать это, но это далеко не единственный способ.
Я не собираюсь сейчас объяснять это 9X_java-se более четко, потому что подозреваю, что 9X_javax это домашнее задание - действительно, некоторые 9X_recursion могут посчитать указанную выше помощь слишком 9X_java большой (я, конечно, немного сомневаюсь). Если 9X_openjdk у вас возникли проблемы с указанными выше 9X_javax советами, обновите свой вопрос, чтобы показать, как 9X_recursive далеко вы продвинулись.
- @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 это отправная точка.
- Зачем вам нужен `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);
}
Ответ #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
Ответ #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
Ответ #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));
}
-
7
-
10
-
22
-
5
-
5
-
4
-
4
-
1
-
2
-
29
-
10
-
7
-
3
-
5
-
14
-
10
-
29
-
7
-
7
-
16
-
9
-
3
-
4
-
6
-
8
-
4
-
26
-
3
-
3
-
4
-
10
-
5
-
5
-
5
-
8
-
22
-
9
-
11
-
4
-
6
-
2
-
3
-
5
-
2
-
5
-
4
-
4
-
4
-
3
-
3