题目描述:
    给定字母数字字符串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+j.charAt(i);
    a=a+k.charAt(i);
    }
    return a;
    }