关注
楼主,基于字典树的第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;
}
}
查看原帖
点赞 评论
相关推荐
10-22 09:27
莆田学院 软件测试 点赞 评论 收藏
分享
牛客热帖
正在热议
# 拼多多求职进展汇总 #
237094次浏览 2039人参与
# 机械求职避坑tips #
23572次浏览 249人参与
# 北方华创开奖 #
67005次浏览 552人参与
# 25届秋招总结 #
409721次浏览 4113人参与
# 25届机械人为了秋招做了哪些准备? #
26232次浏览 363人参与
# 地方国企笔面经互助 #
6914次浏览 17人参与
# 阿里云管培生offer #
62319次浏览 1759人参与
# ai智能作图 #
28489次浏览 341人参与
# 虾皮求职进展汇总 #
90352次浏览 737人参与
# 实习,投递多份简历没人回复怎么办 #
2440297次浏览 34744人参与
# 软件开发投递记录 #
1481272次浏览 23947人参与
# 我的实习求职记录 #
6132046次浏览 84017人参与
# 我在牛爱网找对象 #
74783次浏览 554人参与
# 发工资后,你做的第一件事是什么 #
9023次浏览 42人参与
# 985本硕1个中小厂offer,摆烂or继续努力 #
83146次浏览 601人参与
# 机械人怎么评价今年的华为 #
157900次浏览 1352人参与
# 京东求职进展汇总 #
512810次浏览 4678人参与
# 如果可以,你希望哪个公司来捞你 #
33788次浏览 195人参与
# 你觉得通信/硬件有必要实习吗? #
54768次浏览 698人参与
# 歌尔求职进展汇总 #
42887次浏览 294人参与
# 在职场上,你最讨厌什么样的同事 #
6044次浏览 91人参与
# 如果再来一次,你还会选择这个工作吗? #
115424次浏览 1140人参与