題意很容易明白。如果他沒有要求字典序最小,那麼我們直接用優先佇列靠著每個字母出現的頻率次數逐位貪心就可做出來。
但是現在他要字典序最小,這就是另外乙個問題了。
首先我們知道,如果乙個字串,長度為len,而其中某個字母的個數n,如果n > (len + 1) / 2,那麼這個字串想排列出題目所要求的是不可能的。
所以我們採用貪心的方法來做。
我們逐位暴力,對於乙個長度為len的字串,如果第i位放了字元a,和前面第i-1個不重複,我們對剩下的字元的個數進行判斷。
很明顯,剩下乙個長度為len - i + 1的字串有待新增字元。那麼我們暴力跑一邊看看是否某個字串的個數n > (len - i + 1 + 1) / 2。如果有這樣的字串存在,說明當前位置不能放a,所以繼續迴圈下去看看bcde……。
最後輸出即可。
**如下:
#includeusing namespace std;
char str[100005];
int cnt[30], k = 0;
bool check(int len)
int main() else }}
}cout << str << endl;
} }return 0;
}
字串內容重排序
題目 字串內容重排序。實現對給定字串 字串中包含英文本母 數字 符號 經過處理後的字串按照 字母 數字 符號 的順序存放。要求是不改變字母 數字等在原串中先後次序例如字串 a,2.d?3 e4r87we79 處理後輸出結果為 aderwe2348779,分析 方法 1 逐次掃瞄原串,是字母的放在乙個...
oj 回文字串處理
思路 首先使用string 的s.insert 插入,然後使用反轉函式reverse 最後比較是否相等 include include using namespace std int main cout count endl system pause return 0 string的成員函式inse...
統計字串出現次數重排輸出
樣例 輸入 aabbcddd 輸出 a 2 b 2c 1 d 3abcdabdd 統計字串次數 主要使用sl的map會很快實現,具體參考 上面參考的第三種方法是最快的,但是我不是太理解,所以還是使用比較好理解的第二種方法統計字串出現的次數吧 最後輸出格式 最後輸出將重複的字元分別順序輸出,然後重複該...