You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排查Java代码缺陷:统计含至少一个元音和辅音的字符串子段数量

代码缺陷分析

你的代码的核心分割逻辑(找到最短的同时包含元音和辅音的子段后计数、重置计数器继续向后遍历)是符合题目示例要求的,无法通过全量用例主要存在以下几类遗漏场景:

  • 未处理大小写元音:代码仅判断了小写的a/e/i/o/u,若输入包含大写元音字母(如A、E等),会被错误识别为辅音,导致结果错误。例如输入Ab时,你的代码返回0,正确结果应为1。
  • 未处理非字母字符:如果题目定义中辅音仅指代英文字母里的辅音字母,那么数字、特殊符号等非字母字符既不属于元音也不属于辅音,你的代码会将这类字符错误判定为辅音,导致计数错误。例如输入a1时,你的代码返回1,若规则要求非字母不计入则正确结果应为0。
  • 边界情况兼容问题:如果题目允许包含其他语言的元音字符(比如带重音的字母)也会导致判定错误,不过常规算法题一般默认仅考虑26个英文字母。
修复方案参考

如果题目明确输入仅包含小写英文字母,那仅需要调整元音判定逻辑即可;如果需要兼容大小写和非字母场景,可以参考如下修改:

public static int segments(String password){
    int numberSegments = 0;
    int vowel = 0;
    int consonant = 0;
    // 统一转小写处理,也可以在判断时同时匹配大小写
    String lowerPwd = password.toLowerCase();
    for(int index = 0; index < lowerPwd.length(); index++){
        char c = lowerPwd.charAt(index);
        // 先判断是否是字母,不需要可以删除该判断
        if(!Character.isLetter(c)){
            continue;
        }
        if(c == 'a' || c == 'e' || c == 'i' || c == 'u' || c == 'o'){
            vowel++;
        } else {
            consonant++;
        }
        if(vowel >= 1 && consonant >= 1){
            numberSegments++;
            vowel = 0;
            consonant = 0;
        }
    }
    return numberSegments;
}

你可以根据题目的实际输入范围调整判定规则,比如题目明确输入仅为小写字母,去掉转小写和非字母判断的逻辑即可。

内容的提问来源于stack exchange,提问作者trilocho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:15:03