Given a string which contains only lowercase letters, remove duplicate letters so that every letter appear once and only once. You must make sure your result is the smallest in lexicographical order among all possible results.
Given "bcabc"
Return "abc"
Given "cbacdcbc"
Return "acdb"
刪除字符串里的重復(fù)字符趁俊,要讓字母按字典順序排序乳蓄,前提是不能打亂之前的順序贮懈。
代碼:
解題思路:定義兩個hash表彤钟,一個用來存儲出現(xiàn)字符的個數(shù)岖食,一個用來存儲字符是否出現(xiàn)在結(jié)果中僻爽。然后遍歷字符串器赞,將對應(yīng)字符個數(shù)減一陈瘦,判斷該字符串是否出現(xiàn)在結(jié)果中,如果出現(xiàn)在結(jié)果中窖式,表明該字符串已經(jīng)被放到了正確的位置上蚁飒,則循環(huán)繼續(xù);如果沒有出現(xiàn)在結(jié)果中萝喘,比較當(dāng)前和結(jié)果的最后一個字符串飒箭,如果當(dāng)前的字符串小于result的back的話,并且結(jié)果字符串的最后一個字符在后邊還會出現(xiàn)蜒灰,那么我們就把結(jié)果的最后一個字符串踢出弦蹂,到這里我們是要保證小的字符串放到前邊,也要保證大的字符串在后邊還會出現(xiàn)强窖;如果當(dāng)前的字符串大于結(jié)果的字符串凸椿,或者結(jié)果字符串尾部字符已經(jīng)是最后一個,那么我們就直接把當(dāng)前遍歷的字符串加在結(jié)果的尾部翅溺,并且將inresult設(shè)置為true脑漫,表示這個字符串已經(jīng)出現(xiàn)在result里。為了使第一次比較成功咙崎,我們需要把result初始化成" ",如果result時空的話就沒法去出它的最后一個數(shù)值优幸。