题目描述:
给定字母数字字符串s
。(字母数字字符串是由小写英文字母和数字组成的字符串)。
您必须找到字符串的排列,其中没有字母后跟另一个字母,没有数字后跟另一个数字。即,没有两个相邻的字符具有相同的类型。
如果无法重新格式化字符串,则返回重新格式化的字符串或返回空字符串。
题目示例:
范例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个,不然不成立。
假设有三个篮子(红、蓝、黑)。从黑篮子,串行分别拿出阿拉伯数字和小写字母分开到红、蓝子。
黑(字符串)
红(小写字母)
蓝(阿拉伯数字)
——————————————————————————————
此刻黑篮子为空,红蓝子(小写字母),蓝篮子(阿拉伯数字),对比下红蓝谁多,多的排第一放进去,两个篮子排队依次放进去。
代码:
class Solution {
public String reformat(String s) {
String a = “”;
int n = 0;
int m = 0;
String j = “”;
String k = “”;
for (int i = s.length(); —i >= 0;) {
if (Character.isDigit(s.charAt(i))) {
j = j + s.charAt(i);
m++;
} else if (!Character.isDigit(s.charAt(i))) {
k = k + s.charAt(i);
n++;
}
}
if (-1 <= (m - n) && (m - n) <= 1) {
if (j.length() > k.length()) {
for (int i = 0; i < k.length(); i++) {
a=a+j.charAt(i);
a=a+k.charAt(i);
}
a=a+j.charAt(j.length()-1);
} else if (j.length() < k.length()) {
for (int i = 0; i < j.length(); i++) {
a=a+k.charAt(i);
a=a+j.charAt(i);
}
a=a+k.charAt(k.length()-1);
}else if(j.length()==k.length()) {
for (int i = 0; i < j.length(); i++) {
a=a+k.charAt(i);
a=a+j.charAt(i);
}
}
return a;
} else if ((m - n) < -1 && (m - n > 1)) {
return “”;
}
return “”;
}
}
代码简化(二):
public String isNumeric(String s) {
int n = 0;
int m = 0;
String j = “”;
String k = “”;
String num=””;
for (int i = s.length(); —i >= 0;) {
if (Character.isDigit(s.charAt(i))) {
j = j + s.charAt(i);
m++;
} else if (!Character.isDigit(s.charAt(i))) {
k = k + s.charAt(i);
n++;
}
}
if (-1 <= (j.length() - k.length()) && (j.length() - k.length()) <= 1) {
if (j.length() > k.length()) {
num=cycle(k.length(), j, k);
num=num+j.charAt(j.length()-1);
} else if (j.length() < k.length()) {
num=cycle(j.length(), k, j);
num=num+k.charAt(k.length()-1);
}else if(j.length()==k.length()) {
num=cycle(k.length(), j, k);
}
return num;
} else if ((j.length() - k.length()) < -1 && (j.length() - k.length() > 1)) {
return “”;
}
return “”;
}
public String cycle(int abc,String j,String k) {
String a = “”;
for(int i = 0;i
a=a+k.charAt(i);
}
return a;
}