AcWing 1117. 单词接龙-好理解版
原题链接
简单
作者:
郭松源
,
2021-02-28 11:08:08
,
所有人可见
,
阅读 810
#include <iostream>
#include <cstring>
#include <string>
#include <unordered_map>
using namespace std;
const int N = 25;
int n;
string str[N];
unordered_map<string, int> st;
int res = 0;
// s代表当前用于扩展conc的字符串, conc代表当前拼好的字符串
void dfs(string s, string conc) {
res = max(res, (int)conc.size());
// 从后往前枚举conc后缀长度
st[s]++; // st[s] ++ 和 st[s] -- 相对位置对称
for (int slen = conc.size(), j = slen - 1; j > 0; j--) {
string sub = conc.substr(j, slen - j); // sub是conc的后缀
for (int i = 0; i < n; i++) {
if (st[str[i]] >= 2) continue;
if (str[i].substr(0, slen - j) != sub) continue;
dfs(str[i], conc + str[i].substr(slen - j));
}
}
st[s]--;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> str[i];
char c;
cin >> c;
for (int i = 0; i < n; i++) {
if (c == str[i][0]) {
dfs(str[i], str[i]);
}
}
cout << res << endl;
return 0;
}
点赞