Python中删除列以使排序


假设我们有一个包含N个小写字母字符串的数组A,所有字符串的长度相同。现在,我们可以选择任意一组删除索引,对于每个字符串,我们删除这些索引中的所有字符。

例如,如果我们有一个像["abcdef","uvwxyz"]这样的数组A,删除索引为{0, 2, 3},那么删除后的最终数组将为["bef", "vyz"],A的剩余列为["b","v"], ["e","y"], 和 ["f","z"]。

假设我们选择了一组删除索引D,例如在删除后,A中每一列都是非递减排序的。我们必须找到D的最小可能长度。

因此,如果输入类似于["cba","daf","ghi"],则输出为1,这是因为在选择D = {1}后,每一列["c","d","g"]和["a","f","i"]都是非递减排序的。如果我们选择D = {},则列["b","a","h"]将不是非递减排序的。

为了解决这个问题,我们将遵循以下步骤:

  • A = 通过从数组中获取字符串并将字符分成不同的列来创建一个矩阵
  • B = 新建一个空列表
  • 对于A中的每一列,执行:
    • 如果该列已经排序,则将0插入B
    • 否则,将1插入B
  • 返回B中所有元素的总和

让我们看看下面的实现,以便更好地理解:

示例

在线演示

class Solution:
   def minDeletionSize(self, A):
      return sum([1-(sorted(col)==list(col)) for col in zip(*A)])
ob = Solution()
print(ob.minDeletionSize(["cba","daf","ghi"]))

输入

["cba","daf","ghi"]

输出

1

更新于:2020年7月6日

205 次浏览

开启您的职业生涯

完成课程获得认证

开始
广告
© . All rights reserved.