原始题目
题目大意
给出一个字典,找出所有的复合单词,即恰好有两个单词连接而成的单词。 输入已按照字典序从小到大排序,且不超过120000个单词,输出所有复合词,按照字典序从小到大排序。
解题思路
substring秒过
解题代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <cstdio> #include <cstring> #include <string> #include <iostream> #include <set> #include <queue> #include <algorithm> #include <map> #include <vector> #include <iomanip> #include <cmath> using namespace std;
const int maxn=2e5+5; set <string> s; vector <string> all; string a; int n; int main(){ while(cin>>a){ s.insert(a); } set <string> ::iterator it; for(it=s.begin();it!=s.end();it++){ int len=(*it).size(); for(int i=1;i<len;i++){ string pre=(*it).substr(0,i); string sub=(*it).substr(i,len-i); if(s.count(pre) && s.count(sub)){ cout<<*it<<endl; break; } } } }
|
收获与反思
- 熟悉函数 string::substr() 第一个参数为起始位置,第二个参数为长度。