【哈希表+双指针】
class Solution {
public String evaluate(String s, List<List<String>> knowledge) {
Map<String, String> map = new HashMap();
for (var k: knowledge) map.put(k.get(0), k.get(1));
int n = s.length();
StringBuilder sb = new StringBuilder();
for (int i = 0, j = 0; i < n; i++) {
char c = s.charAt(i);
if (c == '(') {
j = i + 1;
while (s.charAt(j) != ')') j++;
String key = s.substring(i + 1, j);
if (map.containsKey(key)) sb.append(map.get(key));
else sb.append('?');
i = j;
} else {
sb.append(c);
}
}
return sb.toString();
}
}