1 条题解

  • 0
    @ 2026-6-19 10:31:00

    📝 题目大意

    给定一个字符串 SS,判断其是否以 san 结尾,若是输出 Yes,否则输出 No

    💡 解题思路

    1. 题目分析:字符串长度 4S304 \le |S| \le 30,数据范围极小,无需考虑效率问题。题目保证长度至少为 44,因此取最后三个字符不会越界。
    2. 算法推导:直接检查 SS 的倒数第 332211 个字符是否分别为 san。设 len = s.size(),则判断条件为 s[len-3] == 's' && s[len-2] == 'a' && s[len-1] == 'n',满足则输出 Yes,否则输出 No
    3. 边界与细节:输入可能包含空格(如带空格的字符串),因此标准代码使用 getline 而非 cin >> 来读取整行,这是一个防 WA 的细节。另外,由于题目保证 S4|S| \ge 4,索引 len-3 始终合法。

    ⏱️ 复杂度分析

    • 时间复杂度O(S)O(|S|),主要消耗在读取字符串与获取长度上,判断操作本身为 O(1)O(1)
    • 空间复杂度O(S)O(|S|),用于存储输入字符串。

    💻 标准代码 (C++)

    #include <bits/stdc++.h>
    using namespace std;
    
    string s;
    
    int main () {
    	getline(cin, s);                         // 使用 getline 读取整行,避免空格导致截断
    	int len = s.size();                      // 获取字符串长度
    	// 检查末尾三个字符是否为 's', 'a', 'n'
    	if (s[len - 3] == 's' && s[len - 2] == 'a' && s[len - 1] == 'n')
    		printf("Yes");                       // 以 "san" 结尾
    	else
    		printf("No");                        // 不以 "san" 结尾
    	return 0;
    }
    
    • 1

    信息

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