Untitled
Darin
plain_text
2 years ago
1.8 kB
8
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...