1. 程式人生 > >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; }