数青蛙

public int minNumberOfFrogs(String croakOfFrogs) {
    // 当前青蛙数
    int count = 0;
    // 最大青蛙数
    int max_count = 0;
    // 哇
    String str = "croak";

    // str 转 map
    Map map = new HashMap();
    for (Character c : croakOfFrogs.toCharArray()) {
        map.put(c, map.getOrDefault(c, 0) + 1);
        // 不满足顺序
        if (!seqCheck(map)) {
            return -1;
        }
        // c时新增加一只青蛙
        if (c == 'c') {
            count++;
            max_count = Math.max(count, max_count);
        } else if (c == 'k') {
            // 为k时则从map中移除一只青蛙
            for (Character s : str.toCharArray()) {
                // 若croak不足则返回-1
                if (map.get(s) < 1) {
                    return -1;
                }
                map.put(s, map.get(s) - 1);
            }
            // 青蛙数量减一
            count--;
            max_count = Math.max(count, max_count);
        }

    }
    // 循环完当前数量为0
    if (count != 0) {
        return -1;
    }
    return max_count;
}

/**
 * 判断是否按照croak顺序
 *
 * @param map
 * @return
 */
private boolean seqCheck(Map map) {
    Integer c_count = map.getOrDefault('c', 0);
    Integer r_count = map.getOrDefault('r', 0);
    Integer o_count = map.getOrDefault('o', 0);
    Integer a_count = map.getOrDefault('a', 0);
    Integer k_count = map.getOrDefault('k', 0);
    return c_count >= r_count && r_count >= o_count && o_count >= a_count && a_count >= k_count;
}

你可能感兴趣的:(数青蛙)