#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long;
using namespace std;
bool comp(const string &s1,const string &s2)
{
return s1.length()<s2.length();
}
vectornewStr;
void mincut(const string& str, const set& dict,int s,string sstr)
{
if(s==str.length())
{
newStr.push_back(sstr);
}
for(auto it=dict.begin();it!=dict.end();it++)
{
string t=*it;
int i;
for(i=0;i<t.length();++i)
if(t[i]!=str[i+s])break;
if(i==t.length()&&s+i<=str.length())
{
if(s) t=" "+t;
mincut(str,dict,s+i,sstr+t);
}
}
}
int main(int argc, const char * argv[])
{
string strS;
string dictStr;
int nDict;
set dict;
cin>>strS;
cin>>nDict;
for (int i = 0; i < nDict; i++)
{
cin>>dictStr;
dict.insert(dictStr);
}
mincut(strS, dict,0,string());
if(newStr.size())
{
sort(newStr.begin(),newStr.end(),comp);
cout<<newStr[0];
}
else
{
cout<<"n/a";
}
return 0;
}
因为没有看到最后如果不匹配就输出"n/a",所以提交的代码里没有最后的条件判断,通过率75%,可以用一个string代替vector,减小空间复杂度