Daydream

题意:s是否由给定的几个字符串组成。
思路:因为字符串的结尾只能是“r”,”m”,”e”.所以可以从后往前判断。If不是以这这为结尾就输出“NO”,否则截取字符串来比较。

知识点:substr(size_type _Off = 0,size_type _Count = npos)
一种构造string的方法
形式 : s.substr(pos, len)
返回值: string,包含s中从pos开始的len个字符的拷贝(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
异常 :若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾

注意:pos不能小于0;

AC代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
const ll maxn = 2e5 + 10;

int main()
{
	string ss;
	while (cin >> ss)
	{
		for (ll i = ss.size() - 1; i >= 0;--i)
		{
			if (ss[i] == 'r')
			{
				string s2 = "sd", s1 = "as";
				if(i>=5)
				 s1 = ss.substr(i - 5, 6);//在字符结尾的位置,截取整个字符时位置前移的距离为字符串长度减1
				if (i >= 6)
					s2 = ss.substr(i - 6, 7);
				if (s1 != "eraser"&&s2!="dreamer")
				{
					cout << "NO" << endl;
					return 0;
				}
				 if (s1 == "eraser")
					i = i - 5; //因为在循环中会再减1
				if (s2 == "dreamer")
					i = i - 6;
			}
			else if (ss[i] == 'e')
			{
				string  s1 = "as";
				if(i>=4)
					 s1 = ss.substr(i - 4, 5);
				if (s1 != "erase")
				{
					cout << "NO" << endl;
					return 0;
				}
				i = i - 4;
			}
			else if (ss[i] == 'm')
			{
				string  s1 = "as";
				if (i >= 4)
					s1 = ss.substr(i - 4, 5);
				if (s1 != "dream")
				{
					cout << "NO" << endl;
					return 0;
				}
				i = i - 4;
			}
			else //不用这几个字母结尾的话一定是错的
			{
				cout << "NO" << endl;
				return 0;
			}

		}
			cout << "YES" << endl;
	}
	return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落春只在无意间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值