有没有办法在不到 O(n) 的时间内连接 Java 个字符串?
Is there a way to concatenate Java strings in less than O(n) time?
我的家庭作业问题涉及按特定顺序连接字符串。我们首先得到字符串,然后是一组告诉我们如何连接它们的指令;最后我们打印输出字符串。
我使用 Kattis FastIO class 来处理缓冲输入和输出。下面是我的算法,它遍历指令以连接字符串。我尝试制作普通字符串数组,StringBuffers 和 StringBuilders。
该程序似乎按预期工作,但由于效率低下,它在我的提交平台上给出了时间限制错误。似乎附加我所做的方式是 O(n);有没有更快的方法?
public class JoinStrings {
public static void main(String[] args) {
Kattio io = new Kattio(System.in, System.out);
ArrayList<StringBuilder> stringList = new ArrayList<StringBuilder>();
int numStrings = io.getInt();
StringBuilder[] stringArray = new StringBuilder[numStrings];
for (int i = 0; i < numStrings; i++) {
String str = io.getWord();
stringArray[i] = new StringBuilder(str);
}
StringBuilder toPrint = stringArray[0];
while (io.hasMoreTokens()) {
int a = io.getInt();
int b = io.getInt();
stringArray[a-1].append(stringArray[b-1]); // this is the line that is done N times
toPrint = stringArray[a-1];
}
io.println(toPrint.toString());
io.flush();
}
}
StringBuilder.append()
将字符从新字符串复制到现有字符串。它很快但不是免费的。
不是一直将字符串追加到 StringBuilder 数组,而是跟踪需要追加的字符串索引。然后最后附加存储在打印输出索引列表中的字符串。
我的家庭作业问题涉及按特定顺序连接字符串。我们首先得到字符串,然后是一组告诉我们如何连接它们的指令;最后我们打印输出字符串。
我使用 Kattis FastIO class 来处理缓冲输入和输出。下面是我的算法,它遍历指令以连接字符串。我尝试制作普通字符串数组,StringBuffers 和 StringBuilders。
该程序似乎按预期工作,但由于效率低下,它在我的提交平台上给出了时间限制错误。似乎附加我所做的方式是 O(n);有没有更快的方法?
public class JoinStrings {
public static void main(String[] args) {
Kattio io = new Kattio(System.in, System.out);
ArrayList<StringBuilder> stringList = new ArrayList<StringBuilder>();
int numStrings = io.getInt();
StringBuilder[] stringArray = new StringBuilder[numStrings];
for (int i = 0; i < numStrings; i++) {
String str = io.getWord();
stringArray[i] = new StringBuilder(str);
}
StringBuilder toPrint = stringArray[0];
while (io.hasMoreTokens()) {
int a = io.getInt();
int b = io.getInt();
stringArray[a-1].append(stringArray[b-1]); // this is the line that is done N times
toPrint = stringArray[a-1];
}
io.println(toPrint.toString());
io.flush();
}
}
StringBuilder.append()
将字符从新字符串复制到现有字符串。它很快但不是免费的。
不是一直将字符串追加到 StringBuilder 数组,而是跟踪需要追加的字符串索引。然后最后附加存储在打印输出索引列表中的字符串。