1. 题目来源
2. 题目说明
3. 题目解析
方法一:暴力+常规解法
签到题。暴力统计+暴力构造即可,这数据范围,出来我就暴力,真香~简单思路如下:
- 首先开辟两个数组用于存放原
s
串中的数字字符、字母字符 - 若两个数组大小相差大于 1 则无法完成重新格式化,返回空串即可
- 然后进行简单的重新构造就行了,在此会发生两种情况
- 若两数组大小相等,那么任意一个数组中元素作为开头都无所谓
- 若两数组大小相差 1,那么得元素个数大的那个数组得做开头,这个也很好理解,简单处理就将
vt1
设置为长字符串,总是由它开始构造即可
参见代码如下:
// 执行用时 :28 ms, 在所有 C++ 提交中击败了100.00%的用户
// 内存消耗 :7.7 MB, 在所有 C++ 提交中击败了100.00%的用户
class Solution {
public:
string reformat(string s) {
vector<char> vt1, vt2;;
for (auto e : s) {
if (e >= 'a' and e <= 'z') vt1.push_back(e);
else vt2.push_back(e);
}
if (vt1.size() < vt2.size()) swap(vt1, vt2);
if (vt1.size() > vt2.size() + 1) return "";
string str = "";
for (int i = 0; i < vt1.size(); ++i) {
str += vt1[i];
if (i < vt2.size()) str += vt2[i];
}
return str;
}
};