Untitled
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