文章目录
- [1. 关于处理字符串的](#1. 关于处理字符串的)
-
- [1.1 删列造序 II](#1.1 删列造序 II)
1. 关于处理字符串的
1.1 删列造序 II
原题链接为:955. 删列造序 II,我至少提交了6次,都提交失败,最后看的是官方题解,官方的题解真的很不错,具体使用all 函数和zip函数。定义了一个数组cuts,其长度为strs的长度减一,用于表示两两字符串在删除一些字符的基础上是否符合题目要求。参考代码如下:
python
class Solution:
def minDeletionSize(self, A):
# cuts[i] is True : we don't need to check col[i] <= col[i+1]
cuts = [False] * (len(A) - 1)
ans = 0
for col in zip(*A):
if all(cuts[i] or col[i] <= col[i + 1] for i in range(len(col) - 1)):
for i in range(len(col) - 1):
if col[i] < col[i + 1]:
cuts[i] = True
else:
ans += 1
return ans
个人觉得这里可以添加一个判断语句,从而提高代码运行效率。毕竟如果代码运行到某一列字符时,两两字符串如果已经是col[i] < col[i + 1],也就是此时all(cuts)结果为True,此时可以直接结束for循环。改进代码如下:
python
class Solution:
def minDeletionSize(self, A):
# cuts[i] is True : we don't need to check col[i] <= col[i+1]
cuts = [False] * (len(A) - 1)
ans = 0
for col in zip(*A):
if all(cuts[i] or col[i] <= col[i + 1] for i in range(len(col) - 1)):
for i in range(len(col) - 1):
if col[i] < col[i + 1]:
cuts[i] = True
if all(cuts):
break
else:
ans += 1
return ans

可以看到改进一下,效率高了一些。。这道题目很新颖吧,如果之后碰到类似题目,希望到时候我能及时想到这道题目解题思路。