拼多多笔试题 找字典序最小的不同的字符串

拼多多笔试题 找字典序最小的不同的字符串_第1张图片

解析看代码注释:

#include
#include
#include
#include
#include
using namespace std;


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;ifor(int j=0;jif(permutation(vec,i+1,temp,m))
                return true;
            temp.pop_back();
        }
    }
    return false;
}

string solution(vector<string>&vecstr)
{
    vector<string>vec;
    string temp;
    unordered_set<string>m(vecstr.begin(),vecstr.end()); //把输入的相同的字符串去掉
    for(int i=0;i0].size();i++)
    {
        string s = "";
        unordered_set<char>a; //存列号相同的去重后的字符串
        for(int j=0;jif(a.find(vecstr[j][i])!=a.end()) continue; //如果已经存在
            s+= vecstr[j][i]; 
            a.insert(vecstr[j][i]);
        }
        sort(s.begin(),s.end()); //对这个组合的字符串去重,这样方便找字典最小的字符串
        vec.push_back(s);
    }
    //for(int i=0;i
    permutation(vec,0,temp,m); //回溯找字典序最小值
    return temp==""?"-":temp;
}


int main()
{
    vector<string>vecstr;
    int N,L;
    while(~scanf("%d%d",&N,&L))
    {
        string str;
        for(int i=0;icin>>str;
            vecstr.push_back(str);
        }
        string res = solution(vecstr);
        cout<return 0;
}

/*
输入N L
3 4
CAKE
TORN
SHOW

3 4
aecd
cbef
dbcc
*/

你可能感兴趣的:(Leetcode,剑指offer)