LeetCode 1405. 最长快乐字符串(贪心)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1405. 最长快乐字符串(贪心)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 這樣的字符串作為子串,那么該字符串就是一個「快樂字符串」。
給你三個整數 a,b ,c,請你返回 任意一個 滿足下列全部條件的字符串 s:
- s 是一個盡可能長的快樂字符串。
- s 中 最多 有a 個字母 ‘a’、b 個字母 ‘b’、c 個字母 ‘c’ 。
- s 中只含有 ‘a’、‘b’ 、‘c’ 三種字母。
如果不存在這樣的字符串 s ,請返回一個空字符串 “”。
示例 1: 輸入:a = 1, b = 1, c = 7 輸出:"ccaccbcc" 解釋:"ccbccacc" 也是一種正確答案。示例 2: 輸入:a = 2, b = 2, c = 1 輸出:"aabbc"示例 3: 輸入:a = 7, b = 1, c = 0 輸出:"aabaa" 解釋:這是該測試用例的唯一正確答案。提示: 0 <= a, b, c <= 100 a + b + c > 0來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-happy-string
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution { public:string longestDiverseString(int a, int b, int c) {vector<pair<int,char>> v;v.push_back({a,'a'});v.push_back({b,'b'});v.push_back({c,'c'});string ans;int len, i;while(true){len = ans.size();//記錄長度,一次下來,沒變化就退出sort(v.rbegin(), v.rend());//剩余多的放前面for(i = 0; i < v.size(); ++i){if(ans.empty() || (i==0 && ans.back() != v[i].second)){ //空 或者 剩余最多的字符 跟 ans末尾不同,盡量多放if(v[i].first >= 2){ //盡量放兩個ans += v[i].second;ans += v[i].second;v[i].first -= 2;break;}else if(v[i].first >= 1){ans += v[i].second;v[i].first -= 1;break;}}if(i != 0 && ans.back() != v[i].second){ //如果 最多的剩余字符不能放,那么次多的,只放1個if(v[i].first >= 1){ans += v[i].second;v[i].first -= 1;break;}}}if(ans.size() == len)break;//字符串沒有變化,退出}return ans;} };0 ms 6.5 MB
總結
以上是生活随笔為你收集整理的LeetCode 1405. 最长快乐字符串(贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 556. 下一个更大元
- 下一篇: LeetCode 96. 不同的二叉搜索