关注
楼主,基于字典树的第21行会出现越界问题,比如case: zyyhappy zyy 不同长度的解决方案,用标识isEnd来控制,贴一下我的代码,如果有问题,还望各位指正。 #include <iostream>
#include <list>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
class Tire
{
public:
Tire *next[26];
bool isEnd;
Tire()
{
for(int i = 0 ; i < 26 ;i++)
next[i] = nullptr;
isEnd = false;
}
};
bool findSS(Tire *root, string s)
{
for(int i=0 ; i < s.size() ;i++)
{
int index = s[i] - 'a';
if(root->next[index] == nullptr)
return false;
root = root->next[index];
}
return root->isEnd;
}
void addTire(Tire* node, string word)
{
for(int i = 0 ; i < word.size() ;i++)
{
int index = word[i] - 'a';
if(node->next[index] == nullptr)
node->next[index] = new Tire();
node = node->next[index];
}
node->isEnd = true;
}
int main()
{
int t,n;
string s;
cin >> t;
while(t--)
{
cin >> n;
Tire *root = new Tire();
vector<string> v;
bool sign = false;
for(int i = 0 ; i < n ; i++)
{
cin >> s;
string new_s = s+s;
for(int k = 0 ; k < s.size()+1 ;k++)
{
string find_s = new_s.substr(k,s.size());
if(findSS(root,find_s))
{
sign = true;
break;
}
reverse(find_***egin(), find_s.end());
if(findSS(root, find_s))
{
sign = true;
break;
}
}
addTire(root, s);
}
if(sign) cout << "Yeah" << endl;
else cout << "Sad" << endl;
}
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的实习收获 #
23402次浏览 416人参与
# 在国企工作的人,躺平了吗? #
333106次浏览 3862人参与
# 实习吐槽大会 #
25392次浏览 124人参与
# 商战,最累的是我们 #
12649次浏览 49人参与
# 晒一晒你的工位 #
83795次浏览 299人参与
# 我的租房踩坑经历 #
18999次浏览 225人参与
# 穿越回高考你还会选现在的专业吗 #
17399次浏览 228人参与
# 毕业旅行去哪玩儿 #
955次浏览 29人参与
# 小厂实习有必要去吗 #
46346次浏览 267人参与
# 求职你最看重什么? #
69484次浏览 392人参与
# 牛友们,签完三方你在忙什么? #
94831次浏览 837人参与
# 夸夸我的求职搭子 #
190738次浏览 1890人参与
# 摸鱼打卡站 #
39278次浏览 687人参与
# 携程求职进展汇总 #
529639次浏览 3942人参与
# 产运销实习日记 #
51912次浏览 551人参与
# 打工人锐评公司红黑榜 #
145237次浏览 906人参与
# 网易求职进展汇总 #
101801次浏览 982人参与
# 你小时候最想从事什么职业 #
95448次浏览 1719人参与
# 作业帮求职进展汇总 #
52379次浏览 354人参与
# 高学历就一定能找到好工作吗? #
47527次浏览 589人参与