Java面试题求助:如何判断字符串字母顺序并输出异常字符索引
字符串字母顺序检查问题解决方案
题目要求
编写算法检查字符串是否按字母顺序排列:
- 若字符串符合字母顺序,输出0;
- 若不符合,输出首个违反顺序的字符索引。
现有代码的问题
你当前的代码通过将字符串转成字符数组排序后对比的方式,只能判断字符串是否有序,但无法定位首个不符合顺序的索引,且不符合要求的输出格式。此外,排序对比的时间复杂度为O(n log n),效率不如直接遍历相邻字符的O(n)方法。
修改后的实现代码
public class AlphabetOrderChecker { // 方法返回首个不符合顺序的索引,符合则返回0 static int checkAlphabetOrder(String s) { int n = s.length(); // 从第二个字符开始遍历(索引1) for (int i = 1; i < n; i++) { // 比较当前字符与前一个字符的ASCII值 if (s.charAt(i) < s.charAt(i - 1)) { // 找到首个不符合的位置,返回当前索引 return i; } } // 所有字符都符合顺序,返回0 return 0; } public static void main(String[] args) { String s = "aadbbbcc"; int result = checkAlphabetOrder(s); System.out.println(result); // 测试不符合的例子,比如"abdc" String testStr = "abdc"; System.out.println(checkAlphabetOrder(testStr)); // 输出2 } }
代码逻辑说明
- 遍历从索引1开始,因为需要和前一个字符(索引i-1)对比
- 字符的大小对比基于ASCII值,小写字母a-z的ASCII值是连续递增的,直接用
<即可判断是否违反顺序 - 一旦发现当前字符小于前一个,立即返回当前索引,这就是题目要求的首个不符合顺序的位置
- 遍历完成后没有发现违规,返回0
内容的提问来源于stack exchange,提问作者Carrera
相关产品推荐
相关产品推荐

