1 条题解

  • 0
    @ 2026-6-19 10:30:30

    📝 题目大意

    给定一个长度为 NN、仅由 M(男性)和 F(女性)组成的字符串 SS,判断是否存在相邻两个字符相同的情况。若不存在,输出 Yes;否则输出 No

    💡 解题思路

    1. 题目分析N100N \leq 100,数据量极小,O(N)O(N) 扫描即可。核心条件是"不存在相邻的男性或相邻的女性",等价于 S[i]S[i+1]S[i] \neq S[i+1] 对所有 ii 成立。
    2. 算法推导:遍历 i=0i = 0N2N-2(std.cpp 中为 i < n - 1),检查 S[i]S[i]S[i+1]S[i+1] 是否相等。一旦发现相等,立即输出 No 并结束程序(return 0)。若循环正常结束,说明所有相邻字符均不同,输出 Yes
    3. 边界与细节
      • N=1N = 1 时,循环条件 i < 0 不成立,直接跳过循环,输出 Yes——一个人自然满足"交替排列"。
      • 字符串仅含 MF,无需处理其他字符。
      • 注意下标从 0 开始,循环到 n - 2 即可。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),只需一次线性扫描。
    • 空间复杂度O(N)O(N),存储输入字符串。

    💻 标准代码 (C++)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main () {
    	int n;
    	char s[100005];
    	cin >> n >> s;                 // 读入 N 和字符串 S
    	for (int i = 0; i < n - 1; i++) {   // 遍历每对相邻字符
    		if (s[i] == s[i + 1]) {         // 若相邻两字符相同
    			printf("No");               // 不满足交替排列,输出 No
    			return 0;                   // 直接结束程序
    		}
    	}
    	printf("Yes");                      // 所有相邻字符均不同,输出 Yes
    	return 0;
    }
    
    • 1

    信息

    ID
    701
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者