Compound Words UVA - 10391

原题链接

本题属于想到解决方法就会很简单的题目.....但我没想到,第一反应是两层for循环枚举字符串,一看数据范围一定超时,然后又不愿动笔,这题真是活该没做出来555

正确思路:

       确实是枚举,但没有必要两层for循环,我们结合substr截取子串再利用map或者set判重即可

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 set<string> s,ans; 
 4 int main()
 5 {
 6 //    freopen("in.txt","r",stdin);
 7 //    freopen("out.txt","w",stdout);
 8     string str;
 9     while(cin>>str){
10         s.insert(str);
11     }
12     for(auto it=s.begin();it!=s.end();it++){
13         string tmp = *it;
14         for(int i=1;i<tmp.size();i++){
15             string s1 = tmp.substr(0,i);
16             string s2 = tmp.substr(i);
17             if(s.count(s1)&&s.count(s2)){
18                 ans.insert(tmp);
19                 break;                     
20             }
21         }
22     }
23     for(auto it:ans) cout<<it<<endl;
24     return 0;
25 } 

知识补充:

       当看到字符串子串就应该想到substr了,字符串内部的find函数也可以用来查找子串,好久没做字符串题了,复习复习

上一篇:UVa 12219 Common Subexpression Elimination (杂)


下一篇:UVA-247