楼主,基于字典树的第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; } }
点赞 评论

相关推荐

2025-12-28 22:19
门头沟学院 Java
不敢追165女神:简历写得毫无特点,你说你要是大二或者大三找寒假实习到暑期实习这段时间,你的简历还能约到面试。但是你是研究生哥,面试官不会因为你是研究生而降低要求,反而会觉得你是研究生才学了这么一点?为什么我不找个同阶段的本科生?
简历中的项目经历要怎么写
点赞 评论 收藏
分享
01-30 10:21
中北大学 golang
27届学院本誓死冲击...:技术栈不用搞这么详细,主要还是看实习和项目,毕竟技术栈就那点,你能写这么多,别人也可以写这么多,模版换一下换成上下的,不知道怎么排版可以去看看别人怎么写
投了多少份简历才上岸
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务