zoukankan      html  css  js  c++  java
  • UVA10391

    题意:给定单词集合S,包含若干单词,找出S中所有满足这样条件的元素p:p==str1+str2 && str1属于S && str2属于S
    解法:暴力搜;或者用set的查找函数

    You are to find all the two-word compound words in a dictionary. A two-word compound word is a word in the dictionary that is the concatenation of exactly two other words in the dictionary.

    Input

    Standard input consists of a number of lowercase words, one per line, in alphabetical order. There will be no more than 120,000 words.

    Output

    Your output should contain all the compound words, one per line, in alphabetical order.

    Sample Input

    a alien born less lien never nevertheless new newborn the zebra

     

    Sample Output

    alien newborn


    set的搜索:
    #include<iostream>
    #include<set>
    using namespace std;

    int main() {
        set<string> s;
        string tmp;
        while (cin >> tmp)
            s.insert(tmp);
        set<string>::iterator it = s.begin();
        for (it; it != s.end(); it++) {
            tmp = *it;
            for (int i = 1; i < tmp.length(); i++) {
                if (s.find(tmp.substr(0, i)) != s.end() && s.find(tmp.substr(i, tmp.length() - i)) != s.end()) {
                    cout << tmp << endl;
                    break;
                }
            }
        }
        return 0;
    }

    暴力搜:
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int main(){
        //    freopen("in.txt","r",stdin);
        vector<string>vs[26];
        string s;
        while(getline(cin,s))
            if(s.length())vs[s[0]-'a'].push_back(s);
        for(int i=0; i<26; i++){
            if(vs[i].size()>=2){
                for(int j=1; j<vs[i].size(); j++){
                    bool judge = true;
                    for(int k=0; k<j; k++){
                        if(vs[i][j].find(vs[i][k])==0){
                            string t = vs[i][j].substr(vs[i][k].length());
                            if(!vs[t[0]-'a'].empty()){
                                for(int z=0; z<vs[t[0]-'a'].size(); z++){
                                    if(vs[t[0]-'a'][z]==t){
                                        if(judge)cout << vs[i][j] << endl;
                                        judge = false;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return 0;
    }


    找到单词后注意标记,保证只输出1次。

  • 相关阅读:
    Java进阶知识32 mybatis(ibatis)入门CRUD操作【简单演示,只测DAO层】
    Java进阶知识31 SpringMVC+JDBC+Oracle 注解版整合实例
    Java进阶知识30 Struts2+Spring+Hibernate+Oracle XML版整合实例
    Java进阶知识29 Struts2+Spring+Hibernate+Oracle 注解版整合实例
    错误/异常:java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType 的解决方法
    kafka
    手动升级openssl
    解决Homebrew下载更新极慢的问题
    修改centos的源, 使其能访问阿里云服务器
    mycat学习
  • 原文地址:https://www.cnblogs.com/zjutzz/p/3207890.html
Copyright © 2011-2022 走看看