LeetCode 1417. 重新格式化字符串
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1417. 重新格式化字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給你一個混合了數字和字母的字符串 s,其中的字母均為小寫英文字母。
請你將該字符串重新格式化,使得任意兩個相鄰字符的類型都不同。
也就是說,字母后面應該跟著數字,而數字后面應該跟著字母。
請你返回 重新格式化后 的字符串;如果無法按要求重新格式化,則返回一個 空字符串 。
示例 1: 輸入:s = "a0b1c2" 輸出:"0a1b2c" 解釋:"0a1b2c" 中任意兩個相鄰字符的類型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是滿足題目要求的答案。示例 2: 輸入:s = "leetcode" 輸出:"" 解釋:"leetcode" 中只有字母,所以無法滿足重新格式化的條件。示例 3: 輸入:s = "1229857369" 輸出:"" 解釋:"1229857369" 中只有數字,所以無法滿足重新格式化的條件。示例 4: 輸入:s = "covid2019" 輸出:"c2o0v1i9d"示例 5: 輸入:s = "ab123" 輸出:"1a2b3"提示: 1 <= s.length <= 500 s 僅由小寫英文字母和/或數字組成。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/reformat-the-string
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution { public:string reformat(string s) {int count[36] = {0}, i, j, k, a=0, n=0;for(i = 0; i < s.size(); ++i){if(isdigit(s[i]))count[s[i]-'0'+26]++, n++;elsecount[s[i]-'a']++, a++;}if(abs(a-n) > 1)//相差不能超過1return "";if(a >= n)//字母多{k = 0;for(i = 0; i < 26; ++i)//先字母{while(count[i]--){s[k] = i+'a';k += 2;}}k = 1;for(i = 26; i < 36; ++i){while(count[i]--){s[k] = i+'0'-26;k += 2;}}}else//數字多{k = 0;for(i = 26; i < 36; ++i)//先數字{while(count[i]--){s[k] = i+'0'-26;k += 2;}}k = 1;for(i = 0; i < 26; ++i){while(count[i]--){s[k] = i+'a';k += 2;}}}return s;} };總結
以上是生活随笔為你收集整理的LeetCode 1417. 重新格式化字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 560. 和为K的子数
- 下一篇: LeetCode 419. 甲板上的战舰