在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
答案 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);
免责声明:代码可能无法编译或工作,因为它在我的手机上被翻阅(但它有合理的可能性)