有没有一种方法可以在不到O(n)的时间内连接Java字符串?

时间:2019-09-16 04:07:11

标签: java string-concatenation

我的作业问题涉及按特定顺序连接字符串。首先给我们提供字符串,然后是一组说明,告诉我们如何连接它们;最后我们打印输出字符串。

我已经使用Kattis FastIO类来处理缓冲的输入和输出。下面是我的算法,该算法遍历指令以连接字符串。我尝试过制作普通字符串数组,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();
    }
} 

1 个答案:

答案 0 :(得分:3)

StringBuilder.append()将char从新字符串复制到现有字符串。它很快但不是免费的。

不是一直将String附加到StringBuilder数组,而是跟踪需要附加的String索引。然后最后附加存储在打印索引列表中的字符串。