问题
给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。
请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。
请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。
示例:
输入:s = “a0b1c2”
输出:“0a1b2c”
解释:“0a1b2c” 中任意两个相邻字符的类型都不同。 “a0b1c2”, “0a1b2c”, “0c2a1b” 也是满足题目要求的答案。
方案1:
@Test
public void testReformat() {
String string = reformat("fasd12342");
log.info(string);
}
public String reformat(String s) {
int numCount = 0;
int strCount = 0;
for (int i = 0; i < s.length(); i++) {
int tmp = s.charAt(i);
if (tmp >= 48 && tmp <= 57) {
numCount++;
} else {
strCount++;
}
}
if (Math.abs(numCount - strCount) > 1) {
return "";
}
char[] charArray = s.toCharArray();
boolean flag = numCount > strCount;
int j = 1;
for (int i = 0; i < s.length(); i+=2) {
if ((charArray[i] >= 48 && charArray[i] <= 57) != flag) {
while ((charArray[j] >= 48 && charArray[j] <= 57) != flag) {
j+=2;
}
char tmp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = tmp;
}
}
return String.valueOf(charArray);
}