1417. Reformat The String #
题目 #
-
给你一个混合了数字和字母的字符串
s
,其中的字母均为小写英文字母。 -
请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。
-
请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。
思路 #
模拟 #
代码 #
模拟 #
class Solution {
public String reformat(String s) {
LinkedList<Character> charList = new LinkedList<>(), digitList = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (Character.isDigit(ch)) digitList.add(ch);
else charList.add(ch);
}
if (Math.abs(charList.size() - digitList.size()) > 1) return "";
List<Character> Long = charList.size() >= digitList.size() ? charList : digitList;
List<Character> Short = charList.size() < digitList.size() ? charList : digitList;
char[] ans = new char[s.length()];
int ptr = 0, ptrLong = 0, ptrShort = 0;
while (ptr < ans.length) {
ans[ptr++] = Long.get(ptrLong++);
if (ptrShort < Short.size()) ans[ptr++] = Short.get(ptrShort++);
}
return String.valueOf(ans);
}
}