用于检查字符串是否为回文的Java方法

时间:2011-12-09 11:19:59

标签: java string

我想检查字符串是否是回文。我想学习一种简单的方法来使用最少的字符串操作检查相同的方法

11 个答案:

答案 0 :(得分:112)

使用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;
}

答案 1 :(得分:23)

对于最少的代码行和最简单的情况

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

答案 2 :(得分:10)

这是一个简单的&#34;

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;
    }
}

答案 3 :(得分:7)

您可以尝试这样的事情:

    String variable = ""; #write a string name

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

    String strRev = rev.toString(); 

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

答案 4 :(得分:7)

这是一个很好的课程:

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();
  }
}

享受。

答案 5 :(得分:3)

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

答案 6 :(得分:2)

我想这是检查回文的简单方法

String strToRevrse = "MOM";

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

答案 7 :(得分:1)

我是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. 如果字符串不是字母或只是一个字母,那就是a 回文。
  2. 否则,比较字符串的第一个和最后一个字母。
    • 如果第一个和最后一个字母不同,则该字符串不是回文
    • 否则,第一个和最后一个字母是相同的。从字符串中剥离它们,并确定剩余的字符串是否是回文。获取这个较小字符串的答案,并将其用作原始字符串的答案,然后从 1 重复。
  3. 唯一的字符串操作是将字符串更改为大写,以便您可以输入类似'XScsX'

    的内容

答案 8 :(得分:0)

检查这个条件

String string =“// some string ... //”

检查一下...... 如果(string.equals((string.reverse()) { 它是回文 }

答案 9 :(得分:0)

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;
}

答案 10 :(得分:0)

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