Untitled
unknown
java
a year ago
2.3 kB
6
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