All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1401_1500.s1417_reformat_the_string.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1401_1500.s1417_reformat_the_string;

// #Easy #String #2022_07_17_Time_10_ms_(62.27%)_Space_47.7_MB_(43.56%)

import java.util.ArrayList;
import java.util.List;

/**
 * 1417 - Reformat The String\.
 *
 * Easy
 *
 * You are given an alphanumeric string `s`. ( **Alphanumeric string** is a string consisting of lowercase English letters and digits).
 *
 * You have to find a permutation of the string where no letter is followed by another letter and no digit is followed by another digit. That is, no two adjacent characters have the same type.
 *
 * Return _the reformatted string_ or return **an empty string** if it is impossible to reformat the string.
 *
 * **Example 1:**
 *
 * **Input:** s = "a0b1c2"
 *
 * **Output:** "0a1b2c"
 *
 * **Explanation:** No two adjacent characters have the same type in "0a1b2c". "a0b1c2", "0a1b2c", "0c2a1b" are also valid permutations.
 *
 * **Example 2:**
 *
 * **Input:** s = "leetcode"
 *
 * **Output:** ""
 *
 * **Explanation:** "leetcode" has only characters so we cannot separate them by digits.
 *
 * **Example 3:**
 *
 * **Input:** s = "1229857369"
 *
 * **Output:** ""
 *
 * **Explanation:** "1229857369" has only digits so we cannot separate them by characters.
 *
 * **Constraints:**
 *
 * *   `1 <= s.length <= 500`
 * *   `s` consists of only lowercase English letters and/or digits.
**/
@SuppressWarnings("java:S5413")
public class Solution {
    public String reformat(String s) {
        List chars = new ArrayList<>();
        List digits = new ArrayList<>();
        for (char c : s.toCharArray()) {
            if (c >= '0' && c <= '9') {
                digits.add(c);
            } else {
                chars.add(c);
            }
        }
        if (Math.abs(digits.size() - chars.size()) > 1) {
            return "";
        }
        boolean isDigit = digits.size() > chars.size();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if (isDigit) {
                sb.append(digits.remove(0));
            } else {
                sb.append(chars.remove(0));
            }
            isDigit = !isDigit;
        }
        return sb.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy