Java-способ проверить, является ли строка палиндром

Я хочу проверить, является ли строка палиндром или нет. Я хотел бы изучить простой способ проверить то же самое, используя минимально возможные манипуляции с строками

Ответ 1

Вы можете попробовать что-то вроде этого:

    String variable = ""; #write a string name

    StringBuffer rev = new StringBuffer(variable).reverse(); 

    String strRev = rev.toString(); 

    if(variable.equalsIgnoreCase(strRev)) # Check the condition

Ответ 2

Использование reverse является излишним, потому что вам не нужно создавать дополнительную строку, вам просто нужно запросить существующий. В следующем примере проверяется, что первый и последний символы являются одинаковыми, а затем идут дальше внутри строки, проверяющей результаты каждый раз. Он возвращается, как только s не является палиндром.

Проблема с подходом reverse заключается в том, что он выполняет всю работу. Он выполняет дорогостоящее действие над строкой, затем проверяет символ по символу, пока строки не будут равны, а затем вернет false, если это не палиндром. Если вы просто сравниваете маленькие строки все время, тогда это нормально, но если вы хотите защитить себя от большего ввода, вам следует рассмотреть этот алгоритм.

boolean isPalindrome(String s) {
  int n = s.length();
  for (int i = 0; i < (n/2); ++i) {
     if (s.charAt(i) != s.charAt(n - i - 1)) {
         return false;
     }
  }

  return true;
}

Ответ 3

Для наименьших строк кода и простейшего случая

if(s.equals(new StringBuilder(s).reverse().toString())) // is a palindrome.

Ответ 4

Вот простой вариант

public class Palindrome {

    public static void main(String [] args){
        Palindrome pn = new Palindrome();

        if(pn.isPalindrome("ABBA")){
            System.out.println("Palindrome");
        } else {
            System.out.println("Not Palindrome");
        }   
    }

    public boolean isPalindrome(String original){
        int i = original.length()-1;
        int j=0;
        while(i > j) {
            if(original.charAt(i) != original.charAt(j)) {
                return false;
            }
            i--;
            j++;
        }
        return true;
    }
}

Ответ 5

Здесь хороший класс:

public class Palindrome {

  public static boolean isPalindrome(String stringToTest) {
    String workingCopy = removeJunk(stringToTest);
    String reversedCopy = reverse(workingCopy);

    return reversedCopy.equalsIgnoreCase(workingCopy);
  }

  protected static String removeJunk(String string) {
    int i, len = string.length();
    StringBuffer dest = new StringBuffer(len);
    char c;

    for (i = (len - 1); i >= 0; i--) {
      c = string.charAt(i);
      if (Character.isLetterOrDigit(c)) {
        dest.append(c);
      }
    }

    return dest.toString();
  }

  protected static String reverse(String string) {
    StringBuffer sb = new StringBuffer(string);

    return sb.reverse().toString();
  }

  public static void main(String[] args) {
    String string = "Madam, I'm Adam.";

    System.out.println();
    System.out.println("Testing whether the following "
        + "string is a palindrome:");
    System.out.println("    " + string);
    System.out.println();

    if (isPalindrome(string)) {
      System.out.println("It IS a palindrome!");
    } else {
      System.out.println("It is NOT a palindrome!");
    }
    System.out.println();
  }
}

Enjoy.

Ответ 6

 public boolean isPalindrom(String text) {
    StringBuffer stringBuffer = new StringBuffer(text);
     return stringBuffer.reverse().toString().equals(text);
}

Ответ 7

Я думаю, что это простой способ проверить палиндром

String strToRevrse = "MOM";

strToRevrse.equalsIgnoreCase(new StringBuilder(strToRevrse).reverse().toString());

Ответ 8

Я новичок в java, и я рассматриваю ваш вопрос как проблему для улучшения моих знаний, поэтому, пожалуйста, простите меня, если это не отвечает на ваш вопрос:

import java.util.ArrayList;
import java.util.List;

public class PalindromeRecursiveBoolean {

    public static boolean isPalindrome(String str) {

        str = str.toUpperCase();
        char[] strChars = str.toCharArray();

        List<Character> word = new ArrayList<>();
        for (char c : strChars) {
            word.add(c);
        }

        while (true) {
            if ((word.size() == 1) || (word.size() == 0)) {
                return true;
            }
            if (word.get(0) == word.get(word.size() - 1)) {
                word.remove(0);
                word.remove(word.size() - 1);
            } else {
                return false;

            }

        }
    }
}
  • Если строка состоит из букв или одной буквы, это палиндром.
  • В противном случае сравните первую и последнюю буквы строки.
    • Если первая и последняя буквы различаются, строка не является палиндром
    • В противном случае первая и последняя буквы одинаковы. Разделите их из строки и определите, является ли оставшаяся строка палиндром. Возьмите ответ за эту меньшую строку и используйте ее в качестве ответа для исходной строки, затем повторите с 1.

Единственное манипуляция с строкой - это изменение строки в верхнем регистре, чтобы вы могли ввести что-то вроде "XScsX"

Ответ 9

проверьте это условие

Строка string = "//some string...//"

проверить это... если (String.equals((string.reverse()) { это палиндром }

Ответ 10

public static boolean istPalindrom(char[] word){
int i1 = 0;
int i2 = word.length - 1;
while (i2 > i1) {
    if (word[i1] != word[i2]) {
        return false;
    }
    ++i1;
    --i2;
}
return true;
}

Ответ 11

import java.util.Scanner;

public class FindAllPalindromes {
static String longestPalindrome;
public String oldPalindrome="";
static int longest;

public void allSubstrings(String s){        
    for(int i=0;i<s.length();i++){
        for(int j=1;j<=s.length()-i;j++){
            String subString=s.substring(i, i+j);  
            palindrome(subString);             
        }
    }
        }   
public void palindrome(String sub){
    System.out.println("String to b checked is "+sub);
    StringBuilder sb=new StringBuilder();
    sb.append(sub);     // append string to string builder 
    sb.reverse();        
    if(sub.equals(sb.toString())){                        // palindrome condition 
        System.out.println("the given String :"+sub+" is a palindrome");
        longestPalindrome(sub);
    }
    else{
        System.out.println("the string "+sub+"iss not a palindrome");
    }
        }
public void longestPalindrome(String s){
            if(s.length()>longest){                 
        longest=s.length();
        longestPalindrome=s;

    }
    else if (s.length()==longest){    
        oldPalindrome=longestPalindrome;
        longestPalindrome=s;

    }




}

public static void main(String[] args) {
FindAllPalindromes fp=new FindAllPalindromes();

    Scanner sc=new Scanner(System.in);    
    System.out.println("Enter the String ::");
    String s=sc.nextLine(); 
    fp.allSubstrings(s);      
    sc.close();
    if(fp.oldPalindrome.length()>0){
    System.out.println(longestPalindrome+"and"+fp.oldPalindrome+":is the longest palindrome");  
    }
    else{
        System.out.println(longestPalindrome+":is the longest palindrome`````");
    }}
}