Я не могу понять, почему я получаю ошибку времени выполнения по этой проблеме: https://open.kattis.com/problems/joinstrings
Проблема такова: вам дан набор из N строк, каждая строка проиндексирована (индексация на основе 1). Следующие операции put представляют собой входы N-1 двух целых чисел a и b в форме a b
. Вы должны объединить строку индекса b со строкой индекса a, например:
5: please 8: help после ввода 8 5
, строка индекса 8 станет helpplease
, а строка индекс 5 становится
(пустая строка).
В конце вы должны вывести всю объединенную строку из N строк.
Мое решение: я создаю собственный узел, который имеет Строковые атрибуты и указатель на следующий узел. Они инициализируются в HashMap с соответствующей строкой и нулевым узлом. Каждый раз, когда вызывается a b
, я беру указатель в узле индекса a и указываю его на узел индекса b. В самом конце я рекурсивно просматриваю узлы, например LinkedList, распечатывая строку каждого узла.
Ниже приведен код, который я использовал, есть ли что-то, чего я не вижу?
import java.util.*;
public class JoinStrings {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
HashMap<Integer, StrNode> pointer = new HashMap<Integer, StrNode>();
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
pointer.put(i + 1, new StrNode(i+1, sc.next()));
}
int a = 0;
int b = 0;
for (int i = 0; i < n - 1; i++) {
a = sc.nextInt();
b = sc.nextInt();
pointer.get(a).updateNext(pointer.get(b));
}
pointer.get(a).printString();
System.out.println();
sc.close();
}
}
class StrNode {
public int id;
public String string;
public StrNode next;
public StrNode (int id, String string) {
this.id = id;
this.string = string;
this.next = null;
}
public void updateNext(StrNode next) {
if (this.next == null) this.next = next;
else this.next.updateNext(next);
}
public void printString() {
System.out.print(string);
if (this.next != null) this.next.printString();
}
}