题目简介:
给你一个混合了数字和字母的字符串 s
,其中的字母均为小写英文字母。
请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。
请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。
示例 1:
1 2 3
| 输入:s = "a0b1c2" 输出:"0a1b2c" 解释:"0a1b2c" 中任意两个相邻字符的类型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是满足题目要求的答案。
|
示例 2:
1 2 3
| 输入:s = "1229857369" 输出:"" 解释:"1229857369" 中只有数字,所以无法满足重新格式化的条件。
|
提示:
1 <= s.length <= 500
s
仅由小写英文字母和/或数字组成。
思路:
首先分别构造两个字符串来储存字母和数字。
当字母和数字的数量差的绝对值大于1的时候,无法构造满足要求的字符串,则直接返回空串;
否则,则从数量多的那一方作为开头开始构造字符串即可。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| class Solution { public: string reformat(string s) {
string num = ""; string word = "";
for(auto& c : s){
if(c >= '0' && c <= '9') num += c; else word += c; }
if(abs((int)(num.size() - word.size())) > 1) return "";
string res; if(num.size() >= word.size()){
for(int i = 0; i < num.size(); i++){
res += num[i]; if(i < word.size()) res += word[i]; } } else{
for(int i = 0; i < word.size(); i++){
res += word[i]; if(i < num.size()) res += num[i]; } } return res; } };
|