944.削除シーケンス(Python)

1948 ワード

もっと素晴らしい内容は、「力ボタンの簡単な問題」に注目してください.
タイトル
難易度:★☆☆☆タイプ:文字列
各文字列の長さが等しいN個の小文字文字列からなる配列Aが与えられる.
削除インデックスシーケンスを選択し、Aの各文字列について、対応する各インデックスの文字を削除します.残りの文字は、上から読み上げて列を形成します.
たとえば,A=["abcdef","uvwxyz"],インデックスシーケンス{0,2,3}を削除し,削除後Aは["bef","vyz"],Aの列はそれぞれ["b","v",["e","y",["f","z]]である.(形式上、n番目の列は[A[0][n],A[1][n],...,A[A.length-1][n])である.
仮に、削除インデックスDのセットを選択した場合、削除操作を実行した後、Aの残りの各列は非降順に並べ替えられなければならず、D.lengthの最小可能な値を返してください.
ヒント1<=A.length<=100 1<=A[i].length <= 1000

例1入力:["cba","daf","ghi"]出力:1解釈:D={1}を選択すると、削除後のAの列は、["c","d","g",["a","f","i"]となり、いずれも降順でない配列となる.D={}を選択すると,Aの列["b","a","h"]は非降順配列ではない.
例2入力:[a,b]出力:0解釈:D={}
例3入力:["zyx","wvu","tsr"]出力:3解釈:D={0,1,2}
に答える
この問題は膨大に見えるが、表現したい道理は簡単だ.
例1を例にとると、次のような表があります.
単語
第1列
2列目
第3列
単語1
c
b
a
単語2
d
a
f
単語3
g
h
i
表の一部の列を削除するには、2番目の列を削除して、表を取得します.
単語
第1列
第3列
単語1
c
a
単語2
d
f
単語3
g
i
これで各列は非降順になります.
非降順ではないカラムを削除するとタスクが実行され、統計テーブルの非降順ではないカラムの合計数で完了することが観察されます.
したがって、現在の列のソート前後が一致しているかどうかを列ごとに比較し、すべての不一致を統計することができます.つまり、求められます.
class Solution:
    def minDeletionSize(self, A):
        """
        :type A: List[str]
        :rtype: int
        """
        res = 0
        for i in zip(*A):
            if list(i) != sorted(i):
                res += 1
        return res

コンパクトな書き方:
class Solution:
    def minDeletionSize(self, A):
        """
        :type A: List[str]
        :rtype: int
        """
        return sum([list(c) != sorted(c) for c in zip(*A)])

質問やアドバイスがあれば、コメントエリアへようこそ~