【问题标题】:Java way to check if a string is palindrome [duplicate]Java检查字符串是否为回文的方法[重复]
【发布时间】:2012-01-16 16:47:09
【问题描述】:

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

【问题讨论】:

标签: java string


【解决方案1】:

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

【讨论】:

  • 可能是执行方面最快的解决方案。
  • 能否更改此解决方案以将字符而不是字符串作为输入?我正在寻找相同的回文解决方案,但使用字符输入。我也可以问一下 For 循环是否确实在检查字符串的任一半中的每个字符并进行比较?谢谢
  • 单个字符始终是回文。
  • 长度为奇数时不需要比较中心字符。所以你可以简单地拥有:for (int i=0;i&lt;(n / 2);++i)
  • 这很接近了,但是空格或标点符号不会弄乱吗?你应该先清理字符串吗?
【解决方案2】:

为了最少的代码行和最简单的情况

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

【讨论】:

  • 非常好,但删除空格可能更好:return str.replaceAll("\\s", "").equals(new StringBuilder(str.replaceAll("\\s" , "")).reverse().toString())+""; `
【解决方案3】:

这是一个简单的"

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

【讨论】:

    【解决方案4】:

    你可以试试这样的:

        String variable = ""; #write a string name
    
        StringBuffer rev = new StringBuffer(variable).reverse(); 
    
        String strRev = rev.toString(); 
    
        if(variable.equalsIgnoreCase(strRev)) # Check the condition
    

    【讨论】:

    • 您也可以替换 ^[a-z],这样就可以处理像“女士,我是亚当”这样的回文。
    • @Alex K,如果您不担心区分大小写,那么您的句子就是回文。 ;-)
    【解决方案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();
      }
    }
    

    享受吧。

    【讨论】:

    • public boolean isPalindrome (String checkPalindrome) { int length = checkPalindrome.length(); int mid = 长度/2;诠释 i,j=0; for (i=0, j=length-1; i
    【解决方案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. 如果字符串由没有字母或只有一个字母组成,则它是 回文。
        2. 否则,比较字符串的第一个和最后一个字母。
          • 如果第一个和最后一个字母不同,则字符串不是回文
          • 否则,第一个和最后一个字母相同。从字符串中剥离它们,并确定剩下的字符串是否是回文。取这个较小字符串的答案并将其用作原始字符串的答案,然后从 1 开始重复。

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

        【讨论】:

          【解决方案9】:

          检查这个条件

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

          检查这个... if(string.equals((string.reverse()) { 这是回文 }

          【讨论】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-01-31
            • 1970-01-01
            • 2012-04-05
            • 2012-03-26
            相关资源
            最近更新 更多