Untitled

 avatar
unknown
java
5 months ago
1.4 kB
4
Indexable
    public static String getSpecialString(String s) {
        int n = s.length();
        char[] sArr = s.toCharArray();

        for (int i = n - 1; i >= 0; i--) {
            char originalChar = sArr[i];
            for (char c = (char) (sArr[i] + 1); c <= 'z'; c++) {
                if ((i > 0 && c == sArr[i - 1]) || (i + 1 < n && c == sArr[i + 1])) {
                    continue;
                }
                sArr[i] = c;
                if (fillRest(sArr, i + 1)) {
                    return new String(sArr);
                }
            }
            sArr[i] = originalChar; // Reset to original character
        }
        return "-1";
    }

    private static boolean fillRest(char[] sArr, int start) {
        int n = sArr.length;
        for (int i = start; i < n; i++) {
            // Try to assign the smallest possible character
            boolean assigned = false;
            for (char c = 'a'; c <= 'c'; c++) { // Limiting to 'a', 'b', 'c' for efficiency
                if ((i > 0 && c == sArr[i - 1]) || (i + 1 < n && c == sArr[i + 1])) {
                    continue;
                }
                sArr[i] = c;
                assigned = true;
                break;
            }
            if (!assigned) {
                return false; // Cannot assign a valid character
            }
        }
        return true;
    }
Editor is loading...
Leave a Comment