洛谷P1019单词接龙

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

题意要求寻找能拼的最大长度,并且要求每个单词只能最多用两次,根据输入的首字母就可以知道第一个单词是啥,于是联想到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代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值