Untitled
Darin
plain_text
2 years ago
1.8 kB
5
Indexable
Đây là đoạn code của tôi, hãy trả lời câu hỏi mà tôi đặt ra: class UserSolution { Map<String, Node> map = new HashMap<>(); Set<Node> set = new HashSet<>(); void init(int N) { map.clear(); set.clear(); } int generateString(int mTimestamp, int mLifespan, int mLen, char mStr[]) { Node newNode = new Node(); newNode.cnt[mLen]++; newNode.endTime = mTimestamp + mLifespan; set.add(newNode); for (int i = 0; i < mLen - 2; i++) { String sub = "" + mStr[i] + mStr[i + 1] + mStr[i + 2]; Node node = map.get(sub); if (node != null) { node = node.getRoot(); node.update(mTimestamp); if (!node.isDeleted) newNode.merge(node); } map.put(sub, newNode); } return checkString(mTimestamp, mLen); } int checkString(int mTimestamp, int mLen) { int cnt = 0; set.forEach(node -> node.update(mTimestamp)); set.removeIf(node -> node.isDeleted); for (Node node : set) cnt += node.cnt[mLen]; return cnt; } } class Node { int cnt[] = new int[11]; int endTime; boolean isDeleted; Node parent; Node getRoot() { return parent == null ? this : parent.getRoot(); } void update(int time) { if (endTime <= time) isDeleted = true; } void merge(Node node) { if (node != this) { node.isDeleted = true; node.parent = this; for (int i = 5; i <= 10; i++) cnt[i] += node.cnt[i]; } } }
Editor is loading...