1 条题解
-
0
📝 题目大意
给定一个长度为 3 的字符串 ,由
R(米饭)、M(味噌汤)、S(沙拉)各一个字符组成,表示三盘菜从左到右的排列顺序。判断米饭R是否在味噌汤M的左侧。💡 解题思路
-
题目分析:字符串长度固定为 3,且
R、M、S各出现恰好一次。问题本质是判断字符R的下标是否小于字符M的下标。 -
算法推导:根据
M所在的位置分三种情况讨论(代码中数组下标从 1 开始):M在位置 1(最左侧):R不可能在M左边,直接输出No。M在位置 2(中间):检查R在位置 1 还是位置 3。若R在位置 1 则输出Yes,若R在位置 3 则输出No。M在位置 3(最右侧):R一定在M左边,直接输出Yes。
-
边界与细节:字符串长度固定为 3 且无重复字符,没有特殊情况。注意标准代码中
char s[3]却使用了s[1]~s[3](1-indexed),存在数组越界,实际使用时应声明为char s[4]或直接使用string。
⏱️ 复杂度分析
- 时间复杂度:,仅需常数次字符比较。
- 空间复杂度:,仅需存储 3 个字符。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main(){ char s[3]; // 注意:实际建议声明为 char s[4],避免越界 for(int i = 1; i <= 3; i++) // 1-indexed 读入,方便后续判断 cin >> s[i]; if(s[1] == 'M') // M 在最左侧,R 不可能在 M 左边 cout << "No"; else if(s[2] == 'M'){ // M 在中间 if(s[1] == 'R') // R 在位置 1,位于 M 左侧 cout << "Yes"; if(s[3] == 'R') // R 在位置 3,位于 M 右侧 cout << "No"; } else // M 在最右侧,R 一定在 M 左边 cout << "Yes"; return 0; } -
- 1
信息
- ID
- 820
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者