我正在为CodeChef编写代码。但是出现错误TLE,是否可以对其进行更多优化?

时间:2019-04-09 06:24:23

标签: java optimization

我正在为CodeChef编写代码。但是出现错误TLE(2.10000)可以进一步优化吗?

问题链接: https://www.codechef.com/APRIL19B/problems/STRCH

代码:

/* package codechef; // don't place package name! */

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

/* Name of the class has to be "Main" only if the class is public. */
class Codechef
{
    public static void main (String[] args) throws java.lang.Exception
    {
         Scanner ss = new Scanner(System.in);
         int  T = ss.nextInt();

             for(int k=0;k<T;k++){

                         int counter=0;
                         int N=ss.nextInt();
                         String S=ss.next();
                         char c=ss.next().charAt(0);
                         int sLengthOne=S.lastIndexOf(c);
                         int sLengthTwo=S.length();
                         if(S.length()==N){
                                 for (int i = 0; i <= sLengthOne; i++) {
                                    for (int j = 1; j <= sLengthTwo-i; j++) {
                                        if(S.substring(i,i+j).indexOf(c)!=-1){
                                            counter++;
                                        }
                                    }
                                }
                         System.out.println(counter);
                         }
         }

    }
}

2 个答案:

答案 0 :(得分:1)

您当前的代码以O(n * n)运行,您需要将其设置为O(n)。这个想法只是检查需要的字母在哪个位置,然后使用一些数学运算来计算包含该字母的子字符串的数量。您还需要考虑一种避免计算重叠的策略。

答案 1 :(得分:1)

当您尝试为给定字符串生成所有可能的子字符串时,这会增加代码的大量处理时间。取而代之的是,尝试通过计算子字符串而不实际生成子字符串来在数学上找出解决方案,然后检查该子字符串范围内是否存在需要找到的字母的索引。