题意:给出若干字符串,如果某个字符串可以由其他两个字符串拼接而成,则输出这个字符串,输出结果按字典序输出
思路:一开始以为O(n^2)可以过的,后来才发现输入数据有最多可能有120000个,(╯‵□′)╯︵┴─┴,我们可以用set存储所有字符串,遍历每一个字符串,接着再将这个字符串拆成两个字符串,可以利用substr函数,如果这两个字符串在set中出现过,用find或者count函数,就直接输出即可,因为set中默认就是按照字典序排序的,所以直接输出即可
个人总结:substr用法,判断在set中是否存在一个元素的方法
代码:
#include <set>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
string s;
set < string > st;
while(cin >> s)
{
st.insert(s);
}
for(auto i : st)
{
for(int j = 0 ; j < i.length() ; ++ j)
{
//a是从j这个位置一直到i字符串的末尾
string a = i.substr(j);
//b是从0开始取j个字符,其实也就是a的前面
string b = i.substr(0 , j);
if(st.find(a) != st.end() && st.find(b) != st.end())
{
cout << i << endl;
break;
}
}
}
return 0;
}