思路分析
可能是比较追求代码简洁吧,笔者总是第一反应是调用 string 的函数
于是问题可以转化为:
- ’LLL‘ 存在于 s 中
- 最左侧的 ’A’ 和 最右侧的 ‘A’ 坐标不一样
故AC代码可编写如下:
class Solution {
public:
bool checkRecord(string s) {
if(s.find("LLL") != s.npos) return false;
if(s.find('A') != s.rfind('A')) return false;
return true;
}
};
代码反思
提交之后,却发现双复杂度的优势并不明显
看看运行 0ms 的代码, 发现竟是用 “最基础” 的for循环遍历实现的
究其原因,大概调用函数本身就是一件比较耗时耗力的事吧~
class Solution {
public:
bool checkRecord(string s) {
int lateTimes = 0;
int absentTimes = 0;
for (auto a : s) {
if (a == 'L') {
if (++lateTimes >= 3) {
return false;
}
} else if (a == 'A') {
lateTimes = 0;
if (++absentTimes >= 2) {
return false;
}
} else {
lateTimes = 0;
}
}
return true;
}
};