ðð 331. éªè¯äºåæ çååºåºåå
2022幎10æ10æ¥
- algorithm
ðð 331. éªè¯äºåæ çååºåºåå
éŸåºŠ: ðð
é®é¢æè¿°
è§£æ³ 1 - æ
class Solution {
public boolean isValidSerialization(String preorder) {
// æè·¯ïŒ
// åå© æ
// æ¯æ¬¡éå° 2 䞪è¿ç»ç # 诎æ该èç¹æ¯å¶åèç¹ïŒåŒ¹åº # # cur
// 匹åºåïŒè¿èŸ¹çåæ å°±æ¯ç©ºæ äºïŒå¯ä»¥çš # 代æ¿
// åŠæ€åŸªç¯ïŒäžææå¶åèç¹å䞺空èç¹ïŒå¯ŒèŽåæéå¶åèç¹ä¹æžæžå䞺空èç¹ïŒçŽå°äžºç©ºæ
String[] arr = preorder.split(",");
int len = arr.length;
if(len == 1 && arr[0].equals("#")) {
// 空æ
return true;
}
LinkedList<String> stack = new LinkedList<>();
// äŸæ¬¡åæ
for(int i = 0; i < len; i ++) {
String cur = arr[i];
while(!stack.isEmpty() && stack.peek().equals("#") && cur.equals("#")) {
// éèŠåŒ¹åºè¯¥å¶åèç¹ïŒçšç©ºæ 代æ¿
stack.pop();
// åŒ¹åº 2 䞪空èç¹åïŒéèŠä¿è¯åœåèç¹äžºå¶åèç¹ïŒå³æåŒïŒèéåæ¯äžäžª #
if(stack.isEmpty() || stack.peek().equals("#")) {
return false;
}
stack.pop(); // 匹åºææçå¶åèç¹
}
stack.push(cur); // åå
¥åœåå笊䞲ïŒäžè®ºæ¯ åŒ è¿æ¯ #
}
// ç±äºéåå°æåäžäžªåäž²ïŒæ 论åŠäœéœåå
¥äºæåäžäžªå
çŽ ïŒå æ€æç»æ äžåªå©äžæåçäžäžªå
çŽ ïŒèäžå¿
é¡»æ¯ #
return stack.size() == 1 && stack.peek().equals("#");
}
}
èŸåº 1
è§£æ³ 2 - ååºååæè·¯
class Solution {
int index = 0;
int len;
public boolean isValidSerialization(String preorder) {
// æè·¯ïŒ
// é¢æèŠæ±äžé建æ ïŒäœæ¯æ们æç
§å»ºæ çæè·¯ïŒçèœåŠé建æ ïŒåŠæå¯ä»¥ïŒè¯Žæ满足æ¡ä»¶
String[] arr = preorder.split(",");
len = arr.length;
return mySol(arr) && index >= len; // èŠä¿è¯éåå°æåäžäžªå
çŽ
}
private boolean mySol(String[] arr) {
// System.out.println(index);
// éåœç»æ¢æ¡ä»¶
if(index >= len) {
return false;
}
String cur = arr[index];
if(cur.equals("#")) {
// 诎ææ¯ç©ºèç¹ïŒæéå移ïŒè¯¥èç¹æ éé建ïŒæŽæ²¡æå·Šå³åæ ïŒçŽæ¥è¿å
index ++;
return true;
}
// å°èŸŸè¿éïŒè¯Žææ¯äžäžªæåŒçèç¹
index ++;
// éåœå»ºç«å·Šå³åæ
boolean left = mySol(arr);
if(!left) {
return false;
}
boolean right = mySol(arr);
if(!right) {
return false;
}
return true;
}
}