题目:
给定由 N 个小写字母字符串组成的数组 A,其中每个字符串长度相等。
选取一个删除索引序列,对于 A 中的每个字符串,删除对应每个索引处的字符。
比如,有 A = ["abcdef", "uvwxyz"],删除索引序列 {0, 2, 3},删除后 A 为["bef", "vyz"]。
假设,我们选择了一组删除索引 D,那么在执行删除操作之后,最终得到的数组的元素是按 字典序(A[0] <= A[1] <= A[2] ... <= A[A.length - 1])排列的,然后请你返回 D.length 的最小可能值。
思路:
从第一列开始比较如果没有出现小于和等于的情况,可以直接结束。
如果出现了小于的情况,删除这列继续判断。
如果没出现小于出现了等于的情况,那就记录最前列的大小关系进行继续比较。
C++代码
class Solution {
public:
int minDeletionSize(vector<string> &A) {
int c[128];
int ans = 0;
int len = A[0].size();
memset(c, 0 ,sizeof c);
for(int i = 0; i < len; i++) {
int fl = 0;
for(int j = 1; j < A.size(); j++) {
if(A[j][i] < A[j-1][i] && !c[j-1]) {
ans++;
fl = 1;
break;
}
}
if(fl == 1)continue;
for(int j = 1; j < A.size(); j++) {
if(A[j][i] > A[j-1][i]) {
c[j-1] = 1;
}
}
}
return ans;
}
};