2016-04-27 1 views
0

ce qui ne va pas avec ce morceau de code. Doessnt work..returns la chaîne entière inversée ... Je suis en train de vérifier la plus longue chaîne qui est un palindromeprogramme pour vérifier le plus long palindrome ne fonctionne pas

je suis en utilisant la méthode de la force brute pour vérifier chaque sous-chaîne pour un palindrome. Pourquoi serait-ce pas fonctionner

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

C'est l'occasion idéale pour apprendre à utiliser un débogueur. Cherchez comment déboguer avec l'IDE que vous utilisez et tracez le code ligne par ligne. Ce sera essentiel pour vous de faire cela plutôt que d'avoir quelqu'un qui vider la réponse sur vous. – Kon

+0

@Kon Merci patron .. j'avais besoin de ce conseil !! –

Répondre

2

sb.reverse()sb et retourne revers cet objet.

Par conséquent sb1 = sb.reverse(); va inverser sb et affecter sb1 à sb.

Vous voulez faire:

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

Le problème est avec cette ligne:

sb1 = sb.reverse(); 

La méthode reverse() renverse sb lui-même, si sb et sb1 à la fois référence au même objet StringBuilder, qui contient l'inverse de str. Essayez ceci au lieu de déclarer sb et sb1:

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

Ensuite il suffit de remplacer toutes les instances de sb et sb.toString() avec str et sb1.toString() avec revStr.