leetcode 316は、重複した文字を削除します

lc316重複する文字を削除します

私たちは、リターンの最終結果を保存するためにスタックを使用し、

あなたが削除することができますので、今、要素を削除するときを見てみるよりも長い時間とCを来bcabc、Cの後にありました

このように、以前の配列[i]は大きな文字と文字を私はよく繰り返した後、削除することができ

どのようにこのロジックそれを達成するには?

   1)[26]各文字ABCの出現回数を数えます

  、現在の空でないスタックか否かを判断し、スタックの最上部は、アレイよりも大きい[I]、また繰り返した後素子I、すなわち、[上部要素]をカウント> 0、 - 2)[配列[I]数えます

    それが本当であるならば、あなたは、削除トップ要素をポップ、スタックの新しいトップをチェックし続けることができます。その後、スタックに配列[i]は<Javaのスタックを使用して構築することができ>また、CHAR []アナログスタック操作を使用することができます。

    それがfalseの場合は問題ありませんスタックに置かれ、それに等しいよりも、小さいことに注意してください?また、スタックに続け?もちろん、直接入力できるループを通って、次の時間を継続していません

  3)スタックの最後の要素が重複要素を削除して、辞書の順序に従って、

 

1  クラスソリューション{
 2      パブリック文字列removeDuplicateLetters(文字列S){
 3          のchar []スタック= 新しい チャー [26 ]。
4          のchar [] SS = s.toCharArray()。
5          INT [] =カウント新しい INT [256 ]。
6つの         ブール []訪問= 新しい ブール [256 ]。
7          
8          チャーC:SS)
 9              数[C] ++ ;
10          INT idxOfStack = -1 11         以下のためにchar型I:SS){
 12              カウントを[I] - 13              であれば(訪問[I])
 14                  続けます15              
16              ながら(idxOfStack> -1 &&スタック[idxOfStack]> iがカウント&& [スタック[idxOfStack]]> 0 ){
 17は、                  訪問[スタック[idxOfStack] = 18                  idxOfStack-- 19              }
 20              
21              [I] =訪れ22              スタック[++ idxOfStack] = I。
23          }
 24         
25          StringBuilderのSB = 新規のStringBuilder();
26          のためには、int型、I = 0; I <= idxOfStack; iは++ ){
 27              sb.append(スタック[I])。
28          }
 29          リターンsb.toString()。
30      }
 31 }

 

おすすめ

転載: www.cnblogs.com/hwd9654/p/10966709.html