2011-12-09 10 views
11

文字列が回文かどうかをチェックしたい。文字列が回文かどうかを確認するJavaの方法

String variable = ""; #write a string name 

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

    String strRev = rev.toString(); 

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

http://stackoverflow.com/questions/248161/palindromeのようなものを入力することができるように文字列を大文字に変更されます - 検出効率 – Andy

+1

@Andy:それは同じものの効率を検出することです。私はコードとメソッドの最小行数を使用して、最も簡単な方法でコードを使用したい! –

答えて

6

を使用して同じことを確認するための簡単な方法を学びたいです。

+1

^[a-z]を置き換えて、 "Madam、I'm Adam"のような回文と一緒に使えるようにすることもできます。 –

+0

@Alex K、大文字と小文字の区別を心配しなければ、あなたの文章は回文です。 ;-) –

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

お楽しみください、私はあなたがこのような何かを試すことができます最小限の文字列操作に

+0

パブリックブールisPalindrone(文字列checkPalindrome){ \t \t \t \t INT長= checkPalindrome.length()。 \t \t int mid = length/2; \t \t int i、j = 0;用 \t \t \t \t(I = 0、J =長-1; iは半ば<; iは、++ j--){\t \t \t IF(!checkPalindrome.charAt(I)= checkPalindrome.charAt(J)) \t \t \t \t break; \t \t} \t \t IF(I == MID) \t \t \tリターン真。 \t \t else \t \t \t return false; \t} – user358591

102

余分な文字列を生成する必要がないため、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; 
} 
+5

おそらく実行可能な最速のソリューションです。 –

+2

優れたソリューション! – buruzaemon

+0

文字列ではなく文字列を入力するようにこのソリューションを変更できますか?私は、同一のパリンドローム解を探していますが、文字入力があります。また、Forループが実際に各文字を文字列の半分からチェックして比較しているかどうかを尋ねることはできますか?ありがとう –

22
コードの少なくとも行については

と、最も単純なケース

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

チェックこの条件

文字列= "//いくつかの文字列... //"

チェックこれは... if(string.equals(string.reverse()) { は回文型です }

+0

' String'には 'reverse'メソッドがありません。 –

2

私は、これはここに回文

String strToRevrse = "MOM"; 

strToRevrse.equalsIgnoreCase(new StringBuilder(strToRevrse).reverse().toString()); 
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; 
} 
+1

ここから重複しています。http://stackoverflow.com/a/4138856/1740354ソースを言及することは良い考えです。 –

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

をチェックする簡単な方法は、単純な1」

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; 
    } 
} 
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. 文字列が文字でないか1文字だけである場合、それは 回文文字列です。
  2. それ以外の場合は、文字列の最初と最後の文字を比較します。
    • 最初と最後の文字が異なる場合、文字列は回文文字列ではありません。
    • それ以外の場合は、最初と最後の文字は同じです。文字列からそれらを取り除き、残っている文字列が回文かどうかを判断します。この小さな文字列の答えを取り出し、それを元の文字列の答えとして使用し、次にから繰り返します。

は、文字列操作を使用すると、 'XScsX'

3
public boolean isPalindrom(String text) { 
    StringBuffer stringBuffer = new StringBuffer(text); 
    return stringBuffer.reverse().toString().equals(text); 
} 
関連する問題