云计算百科
云计算领域专业知识百科平台

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

题目链接:1807. 替换字符串中的括号内容(中等)

算法原理:

解法:模拟(记录左括号位置)

时间复杂度O(N)

32ms击败83.72%

既然题目保证没有嵌套括号对,所以我们只需要找到每对匹配的左右括号,然后将括号内的子串替换成 knowledge 中对应的 value 即可

为了快速替换掉左右括号内的子串,我们可以提前把 knowledge 中的对应关系提前扔进 哈希表存起来

对于找到每对括号:

①遇到左括号时,用变量 left 记录该左括号下标

②遇到右括号 s[i]时,子串[ left+1,i-1] 即为要替换的子串,我们可以使用 .substring 提取出来然后判断哈希表是否存在,进而进行替换,替换后将 left 置为-1,避免对下次判断造成影响

③如果不是左右括号,且 left<0,说明当前字母不再括号内,直接拼接上即可~~

Java代码:

class Solution {
//1807. 替换字符串中的括号内容
public String evaluate(String s, List<List<String>> knowledge) {
HashMap<String,String> hash=new HashMap<>();
for(List<String> kv:knowledge){
hash.put(kv.get(0),kv.get(1));
}
StringBuilder ret=new StringBuilder();
int n=s.length();
int left=-1;
for(int i=0;i<n;i++){
char ch=s.charAt(i);
//记录左括号位置
if(ch=='(') left=i;
//替换左右括号之间的子串
else if(ch==')'){
String t=s.substring(left+1,i);
t=hash.getOrDefault(t,"?");
ret.append(t);
left=-1;
//ch 不再左右括号之间
}else if(left<0) ret.append(ch);
}
return ret.toString();
}
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » A.每日一题:1807. 替换字符串中的括号内容
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!