当前位置:网站首页>1807. 替换字符串中的括号内容
1807. 替换字符串中的括号内容
2022-07-04 21:23:00 【Mr Gao】
1807. 替换字符串中的括号内容
给你一个字符串 s ,它包含一些括号对,每个括号中包含一个 非空 的键。
比方说,字符串 "(name)is(age)yearsold" 中,有 两个 括号对,分别包含键 "name" 和 "age" 。
你知道许多键对应的值,这些关系由二维字符串数组 knowledge 表示,其中 knowledge[i] = [keyi, valuei] ,表示键 keyi 对应的值为 valuei 。
你需要替换 所有 的括号对。当你替换一个括号对,且它包含的键为 keyi 时,你需要:
将 keyi 和括号用对应的值 valuei 替换。
如果从 knowledge 中无法得知某个键对应的值,你需要将 keyi 和括号用问号 "?" 替换(不需要引号)。
knowledge 中每个键最多只会出现一次。s 中不会有嵌套的括号。
请你返回替换 所有 括号对后的结果字符串。
示例 1:
输入:s = “(name)is(age)yearsold”, knowledge = [[“name”,“bob”],[“age”,“two”]]
输出:“bobistwoyearsold”
解释:
键 “name” 对应的值为 “bob” ,所以将 “(name)” 替换为 “bob” 。
键 “age” 对应的值为 “two” ,所以将 “(age)” 替换为 “two” 。
示例 2:
输入:s = “hi(name)”, knowledge = [[“a”,“b”]]
输出:“hi?”
解释:由于不知道键 “name” 对应的值,所以用 “?” 替换 “(name)” 。
示例 3:
输入:s = “(a)(a)(a)aaa”, knowledge = [[“a”,“yes”]]
输出:“yesyesyesaaa”
解释:相同的键在 s 中可能会出现多次。
键 “a” 对应的值为 “yes” ,所以将所有的 “(a)” 替换为 “yes” 。
注意,不在括号里的 “a” 不需要被替换。
这题显然用哈希表是比较简单的但是,作者这次使用的常规方法尝试的,感兴趣的可以学习一下:
int f(char *s,int index,char ***knowledge,int knowledgeSize){
int i;
for(i=0;i<knowledgeSize;i++){
char *p=knowledge[i][0];
int j=index,k=0,r=0;
while(s[j]!='('&&p[k]!='\0'){
if(s[j++]!=p[k++]){
r=1;
break;
}
}
if(r==0&&s[j]==')'&&p[k]=='\0'){
return i;
}
}
return -1;
}
char * evaluate(char * s, char *** knowledge, int knowledgeSize, int* knowledgeColSize){
char *re=(char *)malloc(sizeof(char )*(strlen(s)+2));
int resize=0;
int i=0;
while(s[i]!='\0'){
// printf("|i %d ",i);
if(s[i]!='('){
re[resize++]=s[i];
}
else{
int index=f(s,i+1,knowledge,knowledgeSize);
if(index==-1){
re[resize++]='?';
}
else{
char *p=knowledge[index][1];
int k=0;
while(p[k]!='\0'){
re[resize++]=p[k++];
}
}
while(s[i]!=')'){
i++;
}
}
i++;
}
re[resize]='\0';
return re;
}
边栏推荐
- Redis03 - network configuration and heartbeat mechanism of redis
- LambdaQueryWrapper用法
- Bookmark
- Golang interview finishing three resumes how to write
- Shutter textfield example
- Kubeadm初始化报错:[ERROR CRI]: container runtime is not running
- Jerry's ad series MIDI function description [chapter]
- GTEST from ignorance to proficiency (3) what are test suite and test case
- Jerry's ad series MIDI function description [chapter]
- 巅峰不止,继续奋斗!城链科技数字峰会于重庆隆重举行
猜你喜欢
Redis03 - network configuration and heartbeat mechanism of redis
Interpreting the development of various intelligent organizations in maker Education
How to remove the black dot in front of the title in word document
Operation of adding material schedule in SolidWorks drawing
Word文档中标题前面的黑点如何去掉
【LeetCode】17、电话号码的字母组合
bizchart+slider实现分组柱状图
QT - double buffer plot
如何使用ConcurrentLinkedQueue做一个缓存队列
解读创客教育中的各类智能化组织发展
随机推荐
Application practice | Shuhai supply chain construction of data center based on Apache Doris
应用实践 | 蜀海供应链基于 Apache Doris 的数据中台建设
淘宝商品评价api接口(item_review-获得淘宝商品评论API接口),天猫商品评论API接口
改善机器视觉系统的方法
挖财学院股票开户安全吗?开户只能在挖财开户嘛?
巅峰不止,继续奋斗!城链科技数字峰会于重庆隆重举行
Hash table
Jerry's ad series MIDI function description [chapter]
Redis bloom filter
TCP三次握手,四次挥手,你真的了解吗?
Jerry's ad series MIDI function description [chapter]
Arcgis 10.2.2 | arcgis license server无法启动的解决办法
Maidong Internet won the bid of Beijing life insurance
Operation of adding material schedule in SolidWorks drawing
MongoDB中的索引操作总结
Cadeus has never stopped innovating. Decentralized edge rendering technology makes the metauniverse no longer far away
Jerry's ad series MIDI function description [chapter]
Bookmark
Shutter WebView example
gtest从一无所知到熟练使用(3)什么是test suite和test case