UVa:10391 Compound Words

题意:给你一个词典,要你输出所有的合成词。

思路:凡是词典中出现的单词都使用map<string,bool>做上标记,对于每个单词枚举它的切点,看左右两边的单词是否都被标记,是则说明它是合成词。由于是按字典序输入,所以不必排序。

注意:组成合成词的两个单词可能相同,也就是说是同一个词。


函数:

string的子串:
string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串
若省略第二个参数则截取到字符串末尾


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include <stack>
#define MAXN 120005
using namespace std;
string word[MAXN];
map<string,bool> mp;
int main()
{
    int n=0;
    while(cin>>word[n])
    {
        mp[word[n]]=true;
        n++;
    }
    for(int i=0; i<n; ++i)
    {
        string t;
        for(int j=0; j<word[i].size(); ++j)
        {
            t+=word[i][j];
            string tt=word[i].substr(j+1);
            if(mp[t]&&mp[tt])
            {
                cout<<word[i]<<endl;
                break;
            }
        }
    }
    return 0;
}


你可能感兴趣的:(UVa:10391 Compound Words)