2018年拼多多校招笔试——拼出一个与输入的单词都不相同的单词

《2018年拼多多校招笔试——拼出一个与输入的单词都不相同的单词》
《2018年拼多多校招笔试——拼出一个与输入的单词都不相同的单词》

《2018年拼多多校招笔试——拼出一个与输入的单词都不相同的单词》

代码:

#include<string>
#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_set>
using namespace std;

class Solution{
public:
    string core(vector<string>& vec)
    {
        string temp;
        unordered_set<string> m(vec.begin(), vec.end());//为了去除vec中重复的字符串
        vector<string> v;

        //将每个字符串相应位置的字符组成一个字符串,并去掉重复,最后进行排序形成的字符串加入到v中
        for(int i=0;i<vec[0].size();i++)
        {
            string s;
            unordered_set<char> a;
            for(int j=0;j<vec.size();j++)
            {
                if(a.find(vec[j][i]) != a.end())
                    continue;
                s += vec[j][i];
                a.insert(vec[j][i]);
            }
            sort(s.begin(), s.end());
            v.push_back(s);
        }        

        permutation(v, 0, temp, m);        

        return temp == ""? "-":temp;
    }

private:
    bool permutation(vector<string>& vec, int index, string& temp, unordered_set<string>& m)
    {
        if(index == vec.size())
        {
            if(m.find(temp) == m.end())
                return true;
            return false;
        }

        for(int i=index; i < vec.size(); i++)
        {
            for(int j=0; j < vec[i].size(); j++)
            {
                temp.push_back(vec[i][j]);
                if(permutation(vec, i+1, temp, m))
                    return true;
                temp.pop_back();
            }
        }
        return false;
    }
};

int main(){
    int n, l;
    cin >> n >> l;
    vector<string> vec;
    for(int i=0;i < n;i++)
    {
        string temp;
        cin >> temp;
        vec.push_back(temp);
    }

    string res = Solution().core(vec);
    cout << res << endl;
}
点赞