• 魔法师

    力扣 LeetCode

    图片

    1807. 替换字符串中的括号内容 - 力扣(LeetCode)

    1807. 替换字符串中的括号内容 - 给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。

    * 比方说,字符串 "(name)is(age)yearsold" 中,有 两个 括号对,分别包含键 "name" 和 "age" 。

    你知道许多键对应的值,这些关系由二维字符串数组 knowledge 表示,其中 knowledge[i] = [keyi, valuei] ,表示键 keyi 对应的值为 valuei 。

    你需要替换...

    思路

    先把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();
    }
    }

    主楼
  • SomeBottle

    比较好处理的哈希表 + 字符串处理题。```
    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;
    }
    };

    #1
  • Lvvvv

    这才是我该写的```
    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;
    }
    };

    #2

发表回复

登录后回复