
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分散式> 聊到大资料框架,从大资料聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
我会持续分享下去,敬请您的关注。
LeetCode 551. 学生考勤记录 I(Student Attendance Record I)
问题描述:
用一个字串来表示一个学生的考勤记录,这个记录仅包含以下三种字元:\'A\' : Absent(缺席)\'L\' : Late(迟到)\'P\' : Present(出席)如果一个学生的考勤记录中不超过一个\'A\',并且不超过两个连续的\'L\',则这个学生会得到奖赏。请你根据这个学生的考勤记录判断他是否会得到奖赏。
示例:

C语言实现:
这个题目很简单了,我们仅仅需要做两件事情:查询s是否存在两个A字元;查询s是否存在子串"LLL";我们有两种实现方法:
第一种. 直接返回:
return !strstr(s, "LLL") && strchr(s, \'A\') == strrchr(s, \'A\');
用strstr函式来查询"LLL"是否在s中存在;
用strchr和strrchr分别从s的首尾查询‘A’。如果存在多个‘A’的话这两个函式一定返回不同的指标地址;相反如果他们返回的结果相同,则说明不存在‘A’或仅存在一个‘A’。
第二种. 上面的方法简单,但是在某些情况下,逻辑上等同于对s遍历两次,我们可以用常规的对字串遍历的方法来做:
宣告3个变数Acount, Lstat, Lcount,分别记录‘A’出现的次数,‘L’是否连续,‘L’连续出现的次数。
遍历的时候,分别赋值并检查Acount和Lcount的值,如果Acount > 1 或者 Lcount > 2 就停止遍历,直接返回false。这样最多只需要对s遍历一次。
程式码如下:


Java语言实现:
Java 的实现是通过indexOf方法来查询“A”和“LLL”,类似C实现的第一种方法,不再撰述。程式码如下:


Python语言实现:
Python 的实现类似C实现的第一种方法,不再撰述。程式码如下:


谢谢大家一直以来的关注和支援!
我一直在努力的写好每一篇文章,画好每一份插图。但是作为一个996从业人员,时间精力十分有限。所以针对评论部分,以后只回答粉丝的问题和私信。希望仅仅是路过的朋友能够体谅,希望更多人关注《吾是我师》,谢谢!





























