此题大意为给个vector<string>的一系列string,删除最少的列,使这个vector<string>为字典序。
如果不考虑等于的关系,字典序很容易获取,而涉及到等于,则需要考虑上下文的关系了。
将已排序的string临时保存后,可以对等于关系的上下文进行处理。
代码如下:
class Solution {
public:
int minDeletionSize(vector<string>& a) {
int as=a.size();
vector<string> b(as,"");//临时保存已排序的string数组
int ret=0;
for(int i=0;i<a[0].size();i++)
{
bool is=false;
for(int j=1;j<as;j++)
{
if(b[j] == b[j-1] && a[j][i]<a[j-1][i])//上文出现相等关系后,判断下文是否有小于关系。
{
is=true;
}
}
if(is)
{
ret++;//记录结果
}else
{
for(int j=0;j<as;j++)
{
b[j]=b[j]+a[j][i];//保存上文的有序string数组
}
}
}
return ret;
}
};
总结,对于字典序的相等关系,需要有额外的空间进行保存处理。