Untitled

 avatar
unknown
java
5 months ago
2.3 kB
4
Indexable
public static String getSpecialString(String s) {
    int n = s.length();
    char[] t = new char[n];
    boolean greater = false;

    for (int i = 0; i < n; i++) {
        char startChar = (!greater) ? s.charAt(i) : 'a';
        boolean found = false;

        for (char ch = startChar; ch <= 'z'; ch++) {
            if (i > 0 && ch == t[i - 1]) {
                continue;
            }
            if (!greater) {
                if (ch < s.charAt(i)) {
                    continue;
                } else if (ch > s.charAt(i)) {
                    greater = true;
                }
            }
            t[i] = ch;
            found = true;
            break;
        }

        if (!found) {
            // Backtracking to find the next valid character
            while (i > 0) {
                i--;
                char prevCh = t[i];
                boolean innerFound = false;

                for (char ch = (char) (prevCh + 1); ch <= 'z'; ch++) {
                    if (i > 0 && ch == t[i - 1]) {
                        continue;
                    }
                    if (!greater) {
                        if (ch < s.charAt(i)) {
                            continue;
                        } else if (ch > s.charAt(i)) {
                            greater = true;
                        }
                    }
                    t[i] = ch;
                    innerFound = true;
                    break;
                }

                if (innerFound) {
                    i++;
                    // Fill the rest of the string
                    for (; i < n; i++) {
                        boolean charFound = false;
                        for (char ch = 'a'; ch <= 'z'; ch++) {
                            if (i > 0 && ch == t[i - 1]) {
                                continue;
                            }
                            t[i] = ch;
                            charFound = true;
                            break;
                        }
                        if (!charFound) {
                            return "-1";
                        }
                    }
                    String result = new String(t);
                    return (result.compareTo(s) > 0) ? result : "-1";
                }
            }
            return "-1";
        }
    }
Editor is loading...
Leave a Comment