题意要求寻找能拼的最大长度,并且要求每个单词只能最多用两次,根据输入的首字母就可以知道第一个单词是啥,于是联想到dfs(),从第一的单词开始搜索,每个单词都尝试一遍看能否拼接,最终所有单词都看完后,累加出的单词长度就是最后答案。
这里要对于两个单词能否拼接做个预处理,换个角度想想两个单词能拼接在一起,就是他们各自的尾和首有重叠,string中的substr()功能可以帮助我们随心情任意肢解字符串,于是可以对于两单词string a,string b,写成专门返回重叠长度的函数。
其中substr(a,length1,length2)会返回从length1开始到length2的子串
```
int check(string a,string b){
//因为最开始会传入首先字母,特殊判断下
if(a.size()==1){
if(a[0]==b[0]){
return 1;
}
return 0;
}else{
for(int i=1;i<min(a.size(),b.size());i++){
//若果a的倒数i个等于b的正数i个,则返回重叠长度i
if(a.substr(a.size()-i,i) == b.substr(0,i)){
return i;
}
}
}
}
```
ac代

该博客介绍了如何利用深度优先搜索(DFS)解决洛谷P1019题目,即寻找能拼出的最长单词序列,每个单词最多使用两次。博主通过预处理判断两个单词是否能拼接,并使用substr()函数检查字符串的重叠部分。最终,通过DFS遍历所有可能的单词序列,找到最大长度。
最低0.47元/天 解锁文章
711

被折叠的 条评论
为什么被折叠?



