Java检查字符串是否为回文的方法[重复]

IT小君   2021-10-27T02:24:31

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

点击广告,支持我们为你提供更好的服务
评论(11)
IT小君

使用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;
}
2021-10-27T02:24:31   回复
IT小君

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

if(s.equals(new StringBuilder(s).reverse().toString())) // is a palindrome.
2021-10-27T02:24:31   回复
IT小君

这是一个简单的“

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;
    }
}
2021-10-27T02:24:31   回复
IT小君

你可以尝试这样的事情:

    String variable = ""; #write a string name

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

    String strRev = rev.toString(); 

    if(variable.equalsIgnoreCase(strRev)) # Check the condition
2021-10-27T02:24:32   回复
IT小君

这是一个很好的类:

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

享受。

2021-10-27T02:24:32   回复
IT小君
 public boolean isPalindrom(String text) {
    StringBuffer stringBuffer = new StringBuffer(text);
     return stringBuffer.reverse().toString().equals(text);
}
2021-10-27T02:24:32   回复
IT小君

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

String strToRevrse = "MOM";

strToRevrse.equalsIgnoreCase(new StringBuilder(strToRevrse).reverse().toString());
2021-10-27T02:24:32   回复
IT小君

我是 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. 如果字符串没有字母或只有一个字母,则它是回文。
  2. 否则,比较字符串的第一个和最后一个字母。
    • 如果第一个和最后一个字母不同,则该字符串不是回文
    • 否则,第一个和最后一个字母是相同的。从字符串中剥离它们,并确定剩余的字符串是否为回文。取这个较小字符串的答案并将其用作原始字符串的答案,然后从1重复

唯一的字符串操作是将字符串更改为大写,以便您可以输入类似“XScsX”的内容

2021-10-27T02:24:32   回复
IT小君

检查这个条件

String string="//一些字符串...//"

检查这个... if(string.equals((string.reverse()) { it is palindrome }

2021-10-27T02:24:33   回复
IT小君
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;
}
2021-10-27T02:24:33   回复
IT小君
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`````");
    }}
}
2021-10-27T02:24:33   回复