我在以下代码中收到超时错误。如何降低代码的复杂性?

时间:2017-09-08 19:57:12

标签: java

您将获得一个字符串s和一个整数k。

您必须找到满足以下条件的另一个字符串t:

t必须是s的子序列。         每个字符必须至少出现k次。         t的长度必须尽可能大。         如果t有多个字符串且长度可能最大,请选择         按字典顺序最小的一个。         例如,假设字符串是s = hackerrank且k = 2。

job_descripton_list

我使用2 for循环来比较每个字符和整个字符串。如果任何字符的计数大于k的值,则该特定字符存储在字符数组中并作为结果打印。            我在方法中使用null作为返回值。如何返回字符串?如何解决超时问题?         如何降低程序的复杂性??

    The solution for this is t=akrrak. Here t is a subsequence of k, it conta 
    ins the characters a,k and r  repeated at least k=2 times. And, it is the 
    only longest possible subsequence that satisfies the conditions.

    Input Format

    The first line contains a string s denoting the original string. 
    The second line contains an integer k.

    Constraints

    String s will only contain lowercase English characters.
    Every input will have a valid solution.
    Output Format

    Print the string t on a single line.

    Sample Input 0

    hackerrank
    2
    Sample Output 0

    akrrak
    Explanation 0

    In 'akrrak', all the characters occur exactly 2 times.

1 个答案:

答案 0 :(得分:0)

  

如何返回字符串?

现在您正在打印解决方案。相反,您需要将其保存到变量中。我认为这里StringBuilder是合适的。您可以这样声明:

StringBuilder result = new StringBuilder();

您可以像这样添加:

result.append(ch[i]);

并返回基础字符串,如下所示:

return result.toString();
  

如何解决超时问题??

除非您的输入非常大或超时时间非常短,否则您的代码不应该超时。

  

如何降低程序的复杂性?

您当前程序的复杂程度似乎是O(n ^ 2),这并非不合理。有办法让它成为O(n),但除非你的输入非常大,否则我认为它确实会有所作为。