1417. Reformat the String

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);
    }
}

致谢 #

宫水三叶