字典序最小的子串行 51Nod 1255

2021-08-28 12:48:27 字數 496 閱讀 6409

記錄每個字母出現的最早和最晚位置 然後掃一遍 維護乙個單調棧 但是並不只考慮字母大小 還要考慮出現最早最晚位置 如果當前字母比棧頂元素小 並且棧頂元素在在之後還會出現 那就換掉這個棧頂

#include using namespace std;

const int maxn=1e5+10;

const int maxc=50;

stack stk;

int l[maxc],r[maxc],book[maxc];

int n,len;

char ch[maxn],ans[maxc];

int main()

stk.push(ch[i]);

book[ch[i]-'a']=1;}}

len=stk.size();

while(!stk.empty())

printf("%s\n",ans);

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...