Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8:如何减少以下代码的编译时间?_Java_String_Performance_Optimization - Fatal编程技术网

Java8:如何减少以下代码的编译时间?

Java8:如何减少以下代码的编译时间?,java,string,performance,optimization,Java,String,Performance,Optimization,如何提高此代码的性能,减少编译时间并保持代码的功能不变 代码是从不同的字符串中提取两个子字符串,并将它们合并,以提供可能的最大回文字符串 问题是:你有两条线,a和b。找到一个字符串c,这样:c=d+e d、 e可以表示为其中d是a的非空子串,e是b的非空子串。 c是一个回文字符串。 长度尽可能长。 对于作为输入接收的每对字符串a和b,在新行中查找并打印字符串。如果您能够形成多个有效字符串,请按字母顺序打印其中一个。如果没有有效答案,请打印-1 import java.io.*; import j

如何提高此代码的性能,减少编译时间并保持代码的功能不变

代码是从不同的字符串中提取两个子字符串,并将它们合并,以提供可能的最大回文字符串

问题是:你有两条线,a和b。找到一个字符串c,这样:c=d+e

d、 e可以表示为其中d是a的非空子串,e是b的非空子串。 c是一个回文字符串。 长度尽可能长。 对于作为输入接收的每对字符串a和b,在新行中查找并打印字符串。如果您能够形成多个有效字符串,请按字母顺序打印其中一个。如果没有有效答案,请打印-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. */
    }
}

我假设您希望减少执行时间,而不是编译时间。 最好避免猜测,而是准确地确定时间是如何花费的。 这是一个很好的例子。 如果你确实有猜测,这将证明它,或者通过向你展示真正的问题是什么来反驳它

我有一个猜测,这只是一个猜测。 您有一个三层嵌套循环,在最内层的循环中,我看到一堆看起来可疑的东西

最大的一个是新的解决方案。 这会影响内存管理器,这可能非常昂贵,不仅是为了制作对象,而且是为了清理对象。 也许你可以把它从内环中移开

之后是字符串temp=sub1+sub2;,它还会点击内存管理器生成一个新字符串。 也许你可以使用字符串生成器

然后是伊斯帕林德罗姆。 我不知道这是否有效

最后,您的代码需要更严格的缩进。
仅此一点就可能导致各种各样的错误,因为无法了解您正在做什么。

这不是我们在这里回答的问题类型,因为您的代码没有任何问题。也就是说,您可能希望在某个地方使用Stringcontains;谢谢你的回复。我希望你能更具体地说明在哪里使用它。也许代码审查是一个更合适的地方,但是。。。你的问题有点不清楚。减少编译时间?那没有道理。也许你的意思是其他的。你知道编译时间和执行时间是完全不同的吗?编译时间是代码编译所需的时间。