计算学生出勤率的组合问题

时间:2018-09-13 19:35:39

标签: java algorithm combinations

我该如何解决这个问题?

输入: s-字符串(n <= 100 000),其中包括以下字母:

一个缺席的
l晚了
现在的p

如果连续字母为“ aaa”,则输出:不允许学生参加考试 如果字符串的长度大于4'L',则输出:不允许学生参加考试

否则-学生可以参加考试。

示例:

  

输入:PPPPPLLLL
输出:不允许学生参加考试

     

输入:PLPLPPPAAA
输出:不允许学生参加考试

     

输入:APLPLLPPAP
输出:学生可以参加考试

我需要一个组合公式。但是如何应用它以及哪个呢?

1 个答案:

答案 0 :(得分:0)

我读到的要求是字符串中的任何地方超过4 L都会阻止学生参加考试-他们不必连续。另外,我假设所有字符都是大写。

我认为,最短的Java解决方案是这样:

static boolean canTakeExam(String s)
{
    return !s.contains("AAA") && s.replaceAll("[^L]", "").length() < 4;
}

但是更有效的实现是:

static boolean canTakeExam(String s)
{
    for(int i=0, ca=0, cl=0; i<s.length(); i++)
    {
        char c = s.charAt(i);
        if(c == 'A')
        {
            if(++ca == 3) return false;
        }
        else
        {
            if(c == 'L' && ++cl == 4) return false;
            ca = 0;
        }
    }
    return true;
}