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

相关推荐

努力学习的小绵羊:我反倒觉得这种挺好的,给不到我想要的就别浪费大家时间了
点赞 评论 收藏
分享
牛客网
牛客企业服务