UVA - 156

一、问题介绍

UVA - 156

 

二、题解

sort函数+Vector容器排序,map容器去重,tolower函数。

本题巧妙的地方在于,题目要求字符串中字母的全排序不能和其他字符串相同,因此本题巧妙地利用所含字母不能完全一样这个属性来进行字符串匹配,从而避免了用暴力法将各个顺序的字符串分别匹配一次。

 

三、实现代码

#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

int main()
{
    int i,j;
    string s;
    vector<string> v;
    map<string,int> m;
    while(cin>>s){
        if(s[0]=='#') break;
        v.push_back(s);
        for(i=0;i<s.size();i++)
            s[i]= tolower(s[i]);
        sort(s.begin(),s.end());
        if(!m[s]) m[s]=0;
        m[s]++;
    }

    sort(v.begin(),v.end());
    for(i=0;i<v.size();i++){
        string tmp;
        if(v[i].size()!=1){
            tmp=v[i];
            for(j=0;j<tmp.size();j++)
                tmp[j]= tolower(tmp[j]);
            sort(tmp.begin(),tmp.end());
            if(m[tmp]==1) cout<<v[i]<<endl;
        }
        else
            cout<<v[i]<<endl;

    }

    return 0;
}