2016-04-27 9 views
0

このコードでは何が問題なのですか? Doessntは逆に文字列全体をwork..returns ... 私は私が回文ごとに部分文字列をチェックするために強引な方法を使用しています回文最長のパリンドロームをチェックするプログラムはありません

で最長の部分文字列をチェックしようとしています。 なぜこれが

public class LongestPalindrome { 

    static String s = "yogaranjnarsap"; 
    static String test = ""; 
    static String result =""; 
    static int resultLen = 0; 
    static String temp = ""; 

    static void checkPalindrome(String str) 
    { 
     StringBuilder sb = new StringBuilder(str); 
     StringBuilder sb1 = new StringBuilder(); 

     sb1 = sb.reverse(); 
     if(sb1.toString().equals(sb.toString())) 
     { 
      //System.out.println(sb1.equals(sb)); 

      if(sb.length() > result.length()) 
      { 
       result = sb.toString(); 
       resultLen = sb.length(); 
      } 
     } 
    } 



    public static void main(String[] args) { 

     for(int i=0;i<s.length();i++) 
     { 
      temp = "" + s.charAt(i); 

      for(int j=i+1;j<s.length();j++) 
      { 
       temp = temp + s.charAt(j); 
       checkPalindrome(temp); 
       //temp = temp + s.charAt(i); 

      } 
      temp =""; 
     } 

     if(result.length() > 1) 
     { 
     System.out.println(result); 
     System.out.println("length" + resultLen); 
     } 

     else 
      System.out.println("no palindrome found"); 
    } 

} 
+4

これは、デバッガの使い方を学ぶのに最適な機会です。使用しているIDEでデバッグする方法を調べ、コードを1行ずつトレースします。誰かにあなたに答えをダンプさせるのではなく、あなたがそれをすることが重要です。 – Kon

+0

@ Konボスありがとうございました。私はそのアドバイスが必要でした! –

答えて

2

sb.reverse()sbを逆にして、このオブジェクトを返す動作しないでしょう。

したがってsb1 = sb.reverse();は、sbを逆にして、sb1sbに割り当てます。

あなたがやりたい:

StringBuilder original = new StringBuilder(str); 
StringBuilder reverse = new StringBuilder(str).reverse(); 
0

問題は、この行を次のとおりです。

sb1 = sb.reverse(); 

reverse()方法はsb自体を反転させ、そのsbsb1の両方が含まれている同じStringBuilderオブジェクトを参照しますstrの逆です。代わりにsbsb1を宣言するこれを試してみてください:

String revStr = new StringBuilder(str).reverse().toString(); 

そして、単にrevStrstrsb1.toString()sbsb.toString()のすべてのインスタンスを置き換えます。

関連する問題