2016-07-23 3 views
-2

Wie verbessert man die Leistung dieses Codes, reduziert die Kompilierzeit und behält die Funktionalität des Codes bei?Java 8: Wie reduziere ich die Kompilierzeit für den folgenden Code?

Der Code besteht darin, zwei Unterzeichenfolgen aus verschiedenen Zeichenfolgen zu extrahieren und sie zu verknüpfen, um die größtmögliche palindromische Zeichenfolge bereitzustellen.

Die Frage war: Sie haben zwei Strings, (a) und (b). Finde eine Zeichenkette (c), so dass: (c) = (d) + (e).

(d), (e) kann wie folgt ausgedrückt werden: (d) ist eine nicht leere Teilzeichenfolge von (a) und (e) ist eine nicht leere Teilzeichenfolge von (b). (c) ist eine Palindromkette. Die Länge von ist so lang wie möglich. Suchen und drucken Sie für jedes der als Eingabe empfangenen Zeichenfolgepaare (a) und (b) eine Zeichenfolge in einer neuen Zeile. Wenn Sie mehr als eine gültige Zeichenfolge erstellen können, drucken Sie die erste alphabetisch. Wenn keine gültige Antwort vorliegt, drucken Sie stattdessen -1.

import java.io.*; 
import java.util.*; 

public class Solution { 
    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; 
} 

    public static void main(String[] args) { 

     String result=""; 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 
     for(int a=0; a<n; a++) 
      {int length1, length2, i,c,d,j; 
     int max_length=0; 
     String string1 = in.next(); 
     String sub1,sub2; 
     String string2 = in.next(); 
     length2=string2.length(); 
     length1 = string1.length(); 

     for(c = 0 ; c <length1 ; c++) 
     { 
     for(i = length1-c ; i >0 ; i--) 
     { 
      sub1 = string1.substring(c, c+i); 
      for(d = 0 ; d < length2 ; d++) 
     { 
     for(j = length2-d ; j >0 ; j--) 
     { 
      sub2 = string2.substring(d, d+j); 
      String temp=sub1+sub2; 
       Solution obj= new Solution(); 
      if(temp.length()>=max_length && obj.isPalindrome(temp)==true) 

       { 
       if (max_length==temp.length()) 
        { if(temp.compareTo(result)<0) 
        { 
        result=temp; 
        }} 
       else { 
        max_length=temp.length(); 
       result=temp; 
        } 
      } 
     } 
     } 
     } 
     } 
      if(max_length==0) 
       System.out.println(-1); 
      else 
       { 
     System.out.println(result); 
      result=""; 
      } 
     } /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */ 
    } 
} 
+2

Dies ist nicht wirklich die Art von Fragen, die wir hier beantworten, da Ihr Code kein Problem hat. –

+0

Das heißt, Sie könnten 'String # enthält' irgendwo verwenden;) –

+0

Vielen Dank für Ihre Antwort. Ich wünschte, Sie könnten genauer darüber, wo Sie es verwenden können. –

Antwort

0

Ich nehme an, dass Sie die Ausführungszeit im Gegensatz zur Kompilierzeit reduzieren möchten. Es ist immer am besten zu vermeiden, zu erraten, und bestimmen Sie genau wie die Zeit verbracht wird. This ist ein gutes Beispiel. Wenn Sie eine Vermutung haben, wird dies beweisen oder widerlegen, indem Sie zeigen, was das eigentliche Problem ist.

Ich habe eine Vermutung (und es ist nur eine Vermutung). Sie haben eine verschachtelte Schleife mit drei Ebenen und in der innersten Schleife sehen Sie eine Reihe von Dingen, die verdächtig aussehen.

Die größte ist new Solution(). Das trifft den Speichermanager, was sehr kostspielig sein kann, nicht nur um die Objekte zu machen, sondern sie zu bereinigen. Vielleicht könnten Sie das aus der inneren Schleife verschieben.

Danach kommt String temp=sub1+sub2;, die auch den Speichermanager trifft, um eine neue Zeichenfolge zu erstellen. Vielleicht könnten Sie den String Builder verwenden.

Danach kommt isPalindrome. Ob das effizient ist oder nicht, weiß ich nicht.

Schließlich benötigt Ihr Code viel disziplinierter Einzug. Das allein kann alle Arten von Fehlern verursachen, weil Sie nicht in der Lage sind, dem zu folgen, was Sie tun.

Verwandte Themen