LeetCode 1405. 最长快乐字符串(贪心)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1405. 最长快乐字符串(贪心)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 題目
如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 這樣的字符串作為子串,那么該字符串就是一個(gè)「快樂(lè)字符串」。
給你三個(gè)整數(shù) a,b ,c,請(qǐng)你返回 任意一個(gè) 滿(mǎn)足下列全部條件的字符串 s:
- s 是一個(gè)盡可能長(zhǎng)的快樂(lè)字符串。
- s 中 最多 有a 個(gè)字母 ‘a(chǎn)’、b 個(gè)字母 ‘b’、c 個(gè)字母 ‘c’ 。
- s 中只含有 ‘a(chǎn)’、‘b’ 、‘c’ 三種字母。
如果不存在這樣的字符串 s ,請(qǐng)返回一個(gè)空字符串 “”。
示例 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" 解釋:這是該測(cè)試用例的唯一正確答案。提示: 0 <= a, b, c <= 100 a + b + c > 0來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-happy-string
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
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();//記錄長(zhǎng)度,一次下來(lái),沒(méi)變化就退出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){ //盡量放兩個(gè)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個(gè)if(v[i].first >= 1){ans += v[i].second;v[i].first -= 1;break;}}}if(ans.size() == len)break;//字符串沒(méi)有變化,退出}return ans;} };0 ms 6.5 MB
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1405. 最长快乐字符串(贪心)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 556. 下一个更大元
- 下一篇: LeetCode 96. 不同的二叉搜索