Pythonの個別の文字の最小のサブシーケンス
テキストがあるとすると、テキストのすべての異なる文字を1回だけ含む、辞書式順序で最小のテキストのサブシーケンスを見つける必要があります。したがって、入力が「cdadabcc」のような場合、出力は「adbc」になります。
これを解決するには、次の手順に従います-
- スタックst、2つのマップlast_oを定義し、考慮します。最初は空白です
- テキストの範囲の長さのiの場合–1から0まで
- text[i]がlast_oに存在しない場合-
- last_o [text [i]]:=i
- 考察[text[i]]:=false
- i:=0
- whilei<テキストの長さ
- スタックに要素がない場合
- text[i]をスタックにプッシュ
- 考察[text[i]]:=true
- iを1増やします
- それ以外の場合、スタックトップ>text[i]および考慮される[text[i]]はfalse
- if last_o [stack top]> i
- 考慮[スタックトップ要素]:=false
- スタックからポップ
- それ以外の場合
- considered [tex [i]] =true
- テキスト[i]をスタックに挿入
- iを1増やします
- if last_o [stack top]> i
- それ以外の場合、スタックトップ要素
- テキスト[i]をスタックに挿入
- 考察[text[i]]:=true
- iを1増やします
- スタックに要素がない場合
- それ以外の場合は、iを1増やします
- text[i]がlast_oに存在しない場合-
理解を深めるために、次の実装を見てみましょう-
例
class Solution(object): def smallestSubsequence(self, text): """ :type text: str :rtype: str """ stack = [] last_o = {} considered = {} for i in range(len(text)-1,-1,-1): if text[i] not in last_o: last_o[text[i]] = i considered[text[i]] = False print(last_o) i = 0 while i < len(text): print(stack,i,text[i]) if len(stack) == 0: stack.append(text[i]) considered[text[i]] = True i+=1 elif stack[-1]>text[i] and considered[text[i]] == False: if last_o[stack[-1]]>i: considered[stack[-1]]=False stack.pop() else: considered[text[i]] = True stack.append(text[i]) i+=1 elif stack[-1]<text[i] and considered[text[i]] == False: stack.append(text[i]) considered[text[i]] = True i+=1 else: i+=1 return "".join(i for i in stack)
入力
"cdadabcc"
出力
"adbc"
-
Pythonのヒストグラムで最大の長方形
ヒストグラムの高さを表す整数配列が1つあるとします。各バーには単位幅があります。次のように最大面積の長方形を見つける必要があります- これを解決するには、次の手順に従います- スタックを作成し、i:=0、ans:=0を設定します <高さのサイズなら スタックの要素が0であるか、スタックの最上位要素の高さが<=height [i]の場合、 iをスタックに挿入し、iを1増やします それ以外の場合- x:=スタックの最上位要素、スタックから削除します。 height:=heights [x] temp:=height *(i * stac
-
Pythonで雨水をトラップする
n個の非負の整数の配列があるとします。これらは、各バーの幅が1である標高マップを表しており、雨が降った後にトラップできる水量を計算する必要があります。したがって、マップは次のようになります- ここでは、6つの青いボックスがあることがわかります。したがって、出力は6になります。 これを解決するには、次の手順に従います- スタックst、water:=0およびi:=0を定義します 私は<身長のサイズ =height [i]の場合、iをスタックにプッシュし、iを1増やします それ以外の場合 x:=スタックトップ要素、スタックからトップを削除 スタックが空で