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

Mit*_*ran 14 java string

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

Jef*_*ter 114

使用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;
}
Run Code Online (Sandbox Code Playgroud)

  • 可能是执行速度最快的解决方案. (5认同)
  • 单个字符总是回文. (4认同)
  • 卓越解决方案 (2认同)

Pet*_*rey 24

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

if(s.equals(new StringBuilder(s).reverse().toString())) // is a palindrome.
Run Code Online (Sandbox Code Playgroud)


kai*_*a88 12

这是一个简单的"

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


Mit*_*ran 7

你可以尝试这样的事情:

    String variable = ""; #write a string name

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

    String strRev = rev.toString(); 

    if(variable.equalsIgnoreCase(strRev)) # Check the condition
Run Code Online (Sandbox Code Playgroud)


amr*_*sal 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

请享用.