跳转至

ABC233B A Reverse

题意分析

给定一个字符串 $S$,我们需要将其从第 $L$ 个字符到第 $R$ 个字符这段子串的顺序颠倒(即反转),然后输出整个字符串。

需要注意:

  • $L, R$ 是从 1 开始计数 的;
  • 反转仅影响位置 $L$ 到 $R$ 的部分,其它部分保持不变;
  • 输出修改后的完整字符串。

解题思路

本题本质是对字符串的某一段子串进行原地反转操作。由于字符串可看作字符数组,我们可以利用编程语言中的 reverse 操作对其子区间进行反转。

步骤如下:

  • 将字符串 $S$ 转换为可修改的字符数组(如列表);
  • 注意输入的 $L,R$ 是 从 1 开始计数,而字符串中下标是从 $0$ 开始,因此:
    • 实际要反转的是 $S[L-1:R-1]$ 这一段;
  • 使用原地 reverse 操作反转这一段子串;
  • 再将修改后的字符数组拼接成字符串输出即可。

关键函数:reverse

  • C++:reverse(s.begin() + l, s.begin() + r + 1)
  • 其作用是反转下标 $[l,r]$ 之间的子串。该函数没有返回值无需赋值,直接在原字符串的基础上修改。
  • 翻转整个字符串:reverse(s.begin(), s.end())

示例讲解

以样例 $1$ 为例:

  • 输入:L = 3, R = 7, S = "abcdefgh"
  • 下标换算:S[2:6] = "cdefg",反转后为 "gfedc"
  • 最后结果为:abgfedch

时间复杂度分析

  • 子串反转操作耗时 $O(R-L+1)$;
  • 总体处理为一次遍历 + 一次反转,时间复杂度为 $O(N)$,其中 $N$ 为字符串长度;
  • 空间复杂度为 $O(N)$(构造新字符串或字符数组)。

总结

  • 本题考察字符串区间操作及基础索引转换;
  • 合理利用语言内置的反转函数,可快速实现;
  • 注意输入下标从 $1$ 开始,需转换为从 $0$ 开始的索引使用。

该题操作简洁明了,适合作为字符串处理入门题。