Leetcode每日一题 —— 1807. 替换字符串中的括号内容

魔法师 2026-09-26 08:42 1



思路


先把KV存到Hash中,然后遍历字符串,遇到左括号找对应右括号取Key对应值。

做完昨天的题表示,不能嵌套的括号弱爆了!


代码


class Solution {
public String evaluate(String s, List<List<String>> knowledge) {
HashMap<String, String> map = new HashMap<>();
for (List<String> list : knowledge) {
map.put(list.get(0), list.get(1));
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
int start = ++i;
while (i < s.length() && s.charAt(i) != ')') {
i++;
}
String name = s.substring(start, i);
sb.append(map.getOrDefault(name, "?"));
} else {
sb.append(s.charAt(i));
}
}
return sb.toString();
}
}
最新回复 (2)
  • SomeBottle 09-26 09:38
    1楼

    比较好处理的哈希表 + 字符串处理题。


    class Solution {
    public:
    string evaluate(string s, vector<vector<string>>& knowledge) {
    // 哈希表题
    unordered_map<string,string> kMap;
    for(auto& k:knowledge){
    kMap[k[0]]=k[1];
    }
    // 注意不会有嵌套的括号
    string res;
    int start=-1; // 上个左括号开始的位置
    for(int i=0;i<s.size();i++){
    if(start==-1){
    // 当前不在括号内
    if(s[i]=='('){
    // 遇到左括号
    start=i;
    }else{
    res.push_back(s[i]);
    }
    }else if(s[i]==')'){
    // 在括号内,且遇到了右括号
    string key=s.substr(start+1,i-start-1);
    if(kMap.count(key)>0){
    res+=kMap[key];
    }else{
    res.push_back('?');
    }
    start=-1;
    }
    }
    return res;
    }
    };
  • Lvvvv 09-26 10:03
    2楼

    这才是我该写的


    class Solution {
    public:
    string evaluate(string s, vector<vector<string>>& knowledge) {
    unordered_map<string,string> S;
    for(const auto& v : knowledge) {
    S[v[0]] = v[1];
    }
    string res = "";
    int n = s.size();
    for(int i = 0; i < n; i++) {
    if(s[i] != '(') {
    res += s[i];
    } else {
    int j = i + 1;
    string t = "";
    while(s[j] != ')') {
    t += s[j];
    j++;
    }
    if(S.find(t) != S.end()) {
    res += S[t];
    } else {
    res += '?';
    }
    i = j;
    }
    }
    return res;
    }
    };
* 帖子来源Linux.do
返回