ascii碼表示的字元轉換成整數實測不超過200(具體多少懶得查了)
分析:要求總的字典序最小,那就讓最小的字元盡可能放在前面,除非最小的字元前面比它大的字元存在只有乙個的情況,這種情況刪掉就不滿足包含原串所有字元的要求了,就不能刪,其他的後面還有的字元就可以隨便刪,由此我們用棧來實現這個操作。
先用book陣列記錄每個字元出現的次數,然後從頭開始遍歷字串,每遍歷到乙個,便將對應的book陣列減一,同時看棧裡是否有這個字元,有就跳過。沒有的話進一步判斷當前字元是否比棧頂要小並且棧頂字元在後面還存在,如果是的話棧頂元素就退棧,持續這個操作直到棧頂元素更小或者之後棧頂元素不存在,把該元素壓進去即可。
**如下:
#includeusingnamespace
std;
typedef
long
long
ll;const
int inf=1
<<30
;const
int maxn=1e5+7
;const
double pi=acos(-1
);const
int mod=1e9+7
;int book[95],vis[95
];char
ans[maxn];
intmain()
int cnt=0
;
for(int i=0;i)
ans[++cnt]=s[i];}}
for(int i=1;i<=cnt;i++)printf("%c"
,ans[i]);
cout
}
CSL的字串(牛客 上海高校程式設計競賽)
時間限制 c c 1秒,其他語言2秒 空間限制 c c 524288k,其他語言1048576k 題目描述 csl 以前不會字串演算法,經過一年的訓練,他還是不會 於是他打算向你求助。給定乙個字串,只含有可列印字元,通過刪除若干字元得到新字串,新字串必須滿足兩個條件 原字串 現的字元,新字串也必須包...
程式設計題 醜陋的字串
輸入描述 輸入包括乙個字串s,字串長度length 1 length 50 字串只包含 a b 三種字元。輸出描述 輸出乙個整數,表示最小的醜陋值 輸入例子1 a?a 輸出例子1 0 include include using namespace std int main int count 0 i...
程式設計題 暗黑的字串
乙個只包含 a b 和 c 的字串,如果存在某一段長度為3的連續子串中恰好 a b 和 c 各有乙個,那麼這個字串就是純淨的,否則這個字串就是暗黑的。例如 baacaaccbaaa 連續子串 cba 中包含了 a b c 各乙個,所以是純淨的字串 aabbccaabb 不存在乙個長度為3的連續子串包...