一个仅由小写英文字母组成的字符串 s 。在一步操作中,你可以完成以下行为: 选则 s 的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如,'b' 用 'a' 替换,'a' 用 'z' 替换。 返回执行上述操作 恰好一次 后可以获得的 字典序最小 的字符串。 子字符串 是字符串中的一个连续字符序列。 现有长度相同的两个字符串 x 和 字符串 y ,在满足 x[i] != y[i] 的第一个位置 i 上,如果 x[i] 在字母表中先于 y[i] 出现,则认为字符串 x 比字符串 y 字典序更小 。 请用java带注释实现
时间: 2024-03-24 16:41:41 浏览: 99
```
public class Solution {
public String smallLexicographically(String s) {
int n = s.length();
char[] charArray = s.toCharArray();
// 找到第一个可以替换的位置,从后往前找
for (int i = n - 1; i >= 0; i--) {
if (charArray[i] != 'a') {
// 替换掉这个位置及其后面的字符
for (int j = i; j < n; j++) {
if (charArray[j] != 'a') {
charArray[j] = (char) (charArray[j] - 1);
} else {
break;
}
}
break;
}
}
return new String(charArray);
}
}
```
这里的思路是从后往前找到第一个可以替换的位置,然后将该位置及其后面的字符都替换为前一个字符,直到遇到字符'a'为止。这样可以保证替换后的字符串字典序最小。
阅读全文