1 条题解

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

    📝 题目大意

    给定一个长度为奇数的小写英文字符串 SS,输出其正中间的字符。中间字符定义为字符串从前往后数第 S+12\frac{|S|+1}{2} 个字符。

    💡 解题思路

    1. 题目分析SS 的长度为奇数(1S991 \leq |S| \leq 99),只需找到中间位置并输出对应字符。字符串下标从 0 开始,需将题目中的 1-based 索引转换为 0-based 索引。
    2. 算法推导:题目定义的中间字符位置为 S+12\frac{|S|+1}{2}(1-based)。在 0-based 索引的 C++ 字符串中,该位置对应下标 S+121=S12\frac{|S|+1}{2} - 1 = \frac{|S|-1}{2}。由于 S|S| 是奇数,整数除法 |S|/2 恰好等于 S12\frac{|S|-1}{2},因此直接输出 s[s.size()/2] 即可。
    3. 边界与细节:当 S=1|S|=1 时,s.size()/2 = 0,输出唯一字符,结果正确。注意使用 s.size() 而非 s.length(),两者等价,标准代码使用前者。

    ⏱️ 复杂度分析

    • 时间复杂度O(1)O(1),仅需读取字符串并输出单个字符。
    • 空间复杂度O(n)O(n),存储长度为 nn 的输入字符串。

    💻 标准代码 (C++)

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
      string s;
      cin >> s;                       // 读入长度为奇数的字符串
      cout << s[s.size()/2] << endl;  // 整数除法:s.size()/2 即为中间字符的 0-based 下标
    }
    
    • 1

    信息

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