美文网首页
leetcode 551

leetcode 551

作者: clshinem | 来源:发表于2017-04-20 13:44 被阅读0次

    You are given a string representing an attendance record for a student. The record only contains the following three characters:

    'A' : Absent.
    'L' : Late.
    'P' : Present.
    A student could be rewarded if his attendance record doesn't contain more than one 'A' (absent) or more than two continuous 'L' (late).

    You need to return whether the student could be rewarded according to his attendance record.

    Example 1:

    Input: "PPALLP"
    Output: True
    

    Example 2:

    Input: "PPALLL"
    Output: False
    

    题目看起来很简单,统计A和L的次数,超出所规定的就false

    def checkRecord(s):
        """
        :type s: str
        :rtype: bool
        """
        num_A = 0
        num_L = 0
        for i in list(s):
            if i == 'A':
                num_A = num_A + 1
            elif i == 'L':
                num_L = num_L + 1
            else:
                pass
        return num_A <= 1 and num_L <= 2
    

    提交的时候报错,用例是LPPALL
    仔细读题发现 continue 是需要L是连续的,想到用正则

    import re
    re.match('正则表达式',s)
    

    写正则的时候边查边写,没成功·····
    想了其他做法:

    class Solution(object):
        def checkRecord(self,s):
            """
            :type s: str
            :rtype: bool
            """
            num_A = 0
            num_L = 0
            for i in list(s):
                if i == 'A':
                    num_A = num_A + 1
                    num_L = 0
                elif i == 'L':
                    num_L = num_L + 1
                else:
                    num_L = 0
                if num_A > 1 or num_L > 2:
                    return False
            return True
    

    这个本来想的是设置一个tag值用来判断前面的是不是L,忘了是因为什么没成功,下次再写一下。

    另一种简单做法:

    
    def checkRecord(s):
        """
        :type s: str
        :rtype: bool
        """
        num_A = 0
        num_L = 0
        for i in list(s):
            if i == 'A':
                num_A = num_A + 1
            elif i == 'L':
                num_L = num_L + 1
            else:
                pass
        return num_A <= 1 and 'LLL' not in s
    
    

    第一种python做法改成 c

    #include <stdio.h>
    #include <string.h>
    int  checkRecord(char* s) {
        int numA = 0;
        int numL = 0;
        int len = strlen(s);
        for (int i = 0;i <= len;i++){
            if(s[i] == 'A'){
                numA++;
                numL = 0;
            }else if(s[i] == 'L'){
                numL++;
            }else{
                numL = 0;
            }
            if(numA >= 2 || numL >= 3){
                return 0;
            }
        }
        return 1;
    }
    

    发现:
    c 的 && 逻辑运算符:前面那个如果成立的话,不会判断后面那个
    但是python 不会,两个都会判断

    eval() 函数可以把字符串变成算式进行运算
    eval('2+3')

    相关文章

      网友评论

          本文标题:leetcode 551

          本文链接:https://www.haomeiwen.com/subject/isoqzttx.html