给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。 请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。 请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。 来源:力扣(LeetCode)
1. 题目
也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。示例 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 仅由小写英文字母和/或数字组成。
链接: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++; else count[s[i]-'a']++, a++; } if(abs(a-n) > 1)//相差不能超过1 return ""; 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; } };
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算