为什么我的节目超过了时间限制?

时间:2015-12-24 02:59:14

标签: java string performance

在codechef上有一个叫做字符串交换的问题(https://www.codechef.com/problems/SSWAP) 它说我的节目超过了时间限制。那么,我该如何改进我的计划呢? 这是代码 -

import java.io.*
class StringSwap {
    public static void main(String []args) throws IOException {
        BufferedReader k = new BufferedReader(new InputStreamReader(System.in));
        byte t = Byte.parseByte(k.readLine());
        String s;
        int d, l;
        for (int i = 1; i <= t; ++i) {
            s = k.readLine();
            d = Integer.parseInt(k.readLine());
            l = s.length();
            for (int j = d - 1; j < l; ++j) System.out.print(s.charAt(j));
            for (int j = d - 2; j >= 0; --j) System.out.print(s.charAt(j));
            System.out.println("");
        }
    } // end of main
} // end of class

1 个答案:

答案 0 :(得分:1)

您的问题是解决方案的时间复杂度,即O(n ^ d),这很糟糕。

这可以在恒定时间内解决,即如果分析重复操作的整体效果,则为O(1)。

Spoiler解决方案:

  

String tail = str.substring(0, d); String result = str.substring(d - 1) + ((str.length() % d) % 2 == 0 ? new StringBuilder(tail).reverse() : tail);
免责声明:代码可能无法编译或工作,因为它在我的手机上被翻阅(但它有合理的可能性)