1807.替换字符串中的括号内容
链接:1807.替换字符串中的括号内容
难度:Medium
标签:数组、哈希表、字符串
简介:给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。请你返回替换 所有 括号对后的结果字符串。
题解 1 - cpp
- 编辑时间:2023-01-12
- 执行用时:368ms
- 内存消耗:114.3MB
- 编程语言:cpp
- 解法介绍:遍历。
class Solution {
public:
    string evaluate(string s, vector<vector<string>>& knowledge) {
        unordered_map<string, string> m;
        for (auto &item : knowledge) m[item[0]] = item[1];
        string ans = "";
        for (int i = 0; i < s.size(); i++) {
            if (s[i] != '(') ans += s[i];
            else {
                cout << "i = " << i << endl;
                int start = i + 1;
                while (s[i] != ')') i++;
                string key = s.substr(start, i - start);
                if (!m.count(key)) ans += "?";
                else ans += m[key];
            }
        }
        return ans;
    }
};
题解 2 - rust
- 编辑时间:2023-01-12
- 执行用时:76ms
- 内存消耗:33.9MB
- 编程语言:rust
- 解法介绍:同上。
use std::collections::HashMap;
impl Solution {
    pub fn evaluate(s: String, knowledge: Vec<Vec<String>>) -> String {
        let s = s.chars().collect::<Vec<char>>();
        let mut ans = String::new();
        let mut m = HashMap::<String, String>::new();
        for item in knowledge {
            m.insert(item[0].clone(), item[1].clone());
        }
        let default_value = "?".to_string();
        let mut i = 0;
        while i < s.len() {
            if s[i] != '(' {
                ans.push(s[i]);
            } else {
                let start = i + 1;
                while s[i] != ')' {
                    i += 1;
                }
                let key = s[start..i].iter().collect::<String>();
                let s: &String = m.get(&key).unwrap_or_else(||&default_value);
                ans.push_str(s);
            }
            i += 1;
        }
        ans
    }
}