华为OD机试-2024年E卷-数大雁[100分] JAVA

代码如下:记录大雁状态用一个LIst数组,里面大雁的状态如果%quack.length!=0的时候说明这个大雁没有闲着,上一声还么叫完

public class OJTest10 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        //定义数组记录
        System.out.println(countDucks(s));
//        System.out.println(countDucks2(s));
    }

    public static int countDucks(String s) {
        String t = "quack";  // 标准叫声
        int m = t.length();  // 标准叫声的长度
        List<Integer> v = new ArrayList<>();  // 用于存储每只大雁的当前状态

        for (char ch : s.toCharArray()) {
            int idx = t.indexOf(ch);  // 查找当前字符在标准叫声中的位置
            if (idx == -1) continue;  // 如果不在标准叫声中,跳过

            boolean flg = true;  // 标记是否需要新增大雁
            for (int i = 0; i < v.size(); i++) {
                if (v.get(i) % m == idx) {
                    v.set(i, v.get(i) + 1);  // 更新大雁状态
                    flg = false;
                    break;
                }
            }

            if (flg && idx == 0) {
                v.add(1);  // 新增大雁,状态设为1
             }
        }

        // 统计完成至少一次完整叫声的大雁数量
        int cnt = (int) v.stream().filter(i -> i >= m).count();

        return cnt > 0 ? cnt : -1;
    }

}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务