前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Leetcode -551.学生出勤记录Ⅰ -557.反转字符串中的单词Ⅲ】

【Leetcode -551.学生出勤记录Ⅰ -557.反转字符串中的单词Ⅲ】

作者头像
YoungMLet
发布2024-03-01 09:54:13
1050
发布2024-03-01 09:54:13
举报
文章被收录于专栏:C++/Linux

Leetcode -551.学生出勤记录Ⅰ

题目:给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。 记录中只含下面三种字符:

‘A’:Absent,缺勤 ‘L’:Late,迟到 ‘P’:Present,到场 如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:

按 总出勤 计,学生缺勤(‘A’)严格 少于两天。 学生 不会 存在 连续 3 天或 连续 3 天以上的迟到(‘L’)记录。 如果学生可以获得出勤奖励,返回 true ;否则,返回 false 。

示例 1: 输入:s = “PPALLP” 输出:true 解释:学生缺勤次数少于 2 次,且不存在 3 天或以上的连续迟到记录。

示例 2: 输入:s = “PPALLL” 输出:false 解释:学生最后三天连续迟到,所以不满足出勤奖励的条件。

思路是遍历字符串,记录缺勤的次数和是否有三天连续迟到,满足任意一个条件返回false;否则返回true;

代码语言:javascript
复制
		bool checkRecord(char* s)
		{
		    //A记录缺勤次数;L标记是否连续迟到三天
		    int A = 0, L = 0;
		
		    if (s[0] == 'A')
		        A++;
		
		    //遍历字符串,从下标1开始,判断三天是否都迟到,若是,将L记为1
		    //如果有缺勤,用 A 记录缺勤次数
		    for (int i = 1; i < strlen(s); i++)
		    {
		        if (s[i - 1] == 'L' && s[i] == 'L' && s[i + 1] == 'L')
		        {
		            L = 1;
		        }
		        else if (s[i] == 'A')
		        {
		            A++;
		        }
		    }
		
		    //最后判断,缺勤两次及以上,或者连续三天都迟到,返回false
		    if (A >= 2 || L)
		    {
		        return false;
		    }
		
		    //否则返回true
		    return true;
		}

Leetcode -557.反转字符串中的单词Ⅲ

题目:给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1: 输入:s = “Let’s take LeetCode contest” 输出:“s’teL ekat edoCteeL tsetnoc”

示例 2: 输入: s = “God Ding” 输出:“doG gniD”

思路是使用双指针 i 和 j ,i 为需要反转的第一个字符,j 为需要反转的最后一个,找到每个字符串后的空格,然后反转空格前的字符串,反转完成后将 ++j 赋给 i ,继续迭代;注意最后一个字符串是要找 ’ \0 ',而不是空格;

代码语言:javascript
复制
		//反转字符串,注意 right 传进来的时候是空格,交换字符前需要先自减
		void reverse(char* left, char* right)
		{
		    while (left < right)
		    {
		        --right;
		        char tmp = *left;
		        *left++ = *right;
		        *right = tmp;
		    }
		}
		
		char* reverseWords(char* s)
		{
		    int j = 0, i = 0;
		
		    //遍历字符串
		    while (s[j])
		    {
		        //当s[j]不为空格时,j继续遍历;否则,反转从 i 到 j 的字符串
		        if (!isspace(s[j]))
		        {
		            j++;
		        }
		        else
		        {
		            reverse(&s[i], &s[j]);
		            i = ++j;
		        }
		
		        //当到最后一个字符串的时候,字符串的最后不是空格,而是'\0'
		        if (s[j] == '\0')
		        {
		            reverse(&s[i], &s[j]);
		        }
		    }
		    return s;
		}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Leetcode -551.学生出勤记录Ⅰ
  • Leetcode -557.反转字符串中的单词Ⅲ
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档