跳到主要内容

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
}
}