1255 字典序最小的子串行
天津大學oj
基準時間限制:1 秒 空間限制:131072 kb 分值: 40
難度:4級演算法題
給出乙個由a-z組成的字串s,求他的乙個子串行,滿足如下條件:
1、包含字串中所有出現過的字元各1個。
2、是所有滿足條件1的串中,字典序最小的。
例如:babbdcc,出現過的字元為:abcd,而包含abcd的所有子串行中,字典序最小的為abdc。
input
輸入1行字串s,所有字元均為小寫,字串的長度為l。(1 <= l <= 100000)。output
輸出包含s中所有出現過的字元,每個字元各1個,並且字典序最小的s的子串行。input示例
babbdccoutput示例
abdc
李陶冶(題目提供者)
思路:維護乙個棧,依次取字元判斷:
如果棧裡面沒有當前字元,那麼應該入棧,但是入棧前要維護棧,
那麼我們判斷棧頂是否滿足 「棧頂字元在後面還有 並且 字典序大於等於當前字元」,滿足的話棧頂出棧,貪心尋找字典序最小的結果。
#include#include#include#includeusing namespace std;
string s;
int c[127],vis[127];
vectora;
int main()
a.push_back(s[i]);
vis[s[i]] = 1;}}
cout << string(a.begin(),a.end()) << endl;
return 0;
}
51Nod 1255 字典序最小的子串行
acm模版 這道題大致思路不難,但是細節問題頗多,用兩種方法解題。第一種,遍歷原串,如果答案串中沒有則往答案串中插入,如果答案串中第i個等於它,並且該字母往後查有第j個比他小,並且保證i和j之間的字母在原串中依然存在 保證可以被替換掉 則刪除第i個,後續向前遷移1,並在結尾處插入該字母。第二種是利用...
51Nod 1255 字典序最小的子串行
給出乙個由a z組成的字串s,求他的乙個子串行,滿足如下條件 1 包含字串中所有出現過的字元各1個。2 是所有滿足條件1的串中,字典序最小的。例如 babbdcc,出現過的字元為 abcd,而包含abcd的所有子串行中,字典序最小的為abdc。一開始看到這題就有乙個思路 如果現在找出來的答案末尾是x...
51 nod 1255 字典序最小的子串行
思路 分三種情況 1 棧空,直接將字母壓入。2 棧非空,當前字母大於棧頂元素,棧中未出現該字母,壓入棧。3 棧非空,當前字母小於棧頂元素,棧中未出現該字母,執行迴圈 棧頂元素大於當前字母,且後面還存在棧頂元素,彈出棧頂元素。最後壓入當前字母。include include include inclu...