SWE · CodeSignal OA

Capital One 首尾元音时反转中间字符串

OA 字符串题:两端均为元音才反转内部字符;用边界测试说明大小写和 Unicode 的待确认口径。

题目重点:OA 字符串题:两端均为元音才反转内部字符;用边界测试说明大小写和 Unicode 的待确认口径。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版元音集合为英文 a/e/i/o/u,不区分大小写;两端可以是不同元音,如 a…e。
  • 仅反转 s[1:n−1] 的字符顺序,首尾原样保留;n≤2 时中间为空或无字符,返回原串。
  • 非英文字符、组合字母和 y 是否算元音题目未说,输入范围需核。

解题路线

  1. 先问‘同为 vowel’是两端都属元音集合还是同一个字符;按现场回答决定条件。
  2. 若长度<2 或任一端非元音,直接返回原串;否则返回 s[0] + reverse(s[1:n−1]) + s[n−1]。
  3. 字符层实现不应意外改变大小写;Python/JS 对 Unicode grapheme cluster 的切分可能需特定库,英文 OA 可按字母处理。
  4. 测不同元音两端、同元音、辅音端、空串/单字符/双字符与中间含空格。

手动走一遍

训练输入 `aBCDe`,a/e 都是元音,中间 `BCD` 反转为 `DCB`,返回 `aDCBe`。若输入 `bCDa`,首端 b 非元音,原样返回。

规模与取舍

长度 n,拷贝并反转 O(n) 时间、O(n) 新字符串空间;若允许可变字符数组原地反转,额外 O(1)。

易错点与追问

容易失分的边界

  • 把首尾也一起反转。
  • 要求首尾必须同一个元音,但题目未明确。
  • 只识别小写导致 `A…e` 被漏。
  • 短串访问 s[−1] 时没考虑空串。

继续深挖

  • y 或重音元音怎么算?
  • 若每一段由元音包围的中间都要反转,如何分段?
  • 流式字符输入需等到末尾才知道能否反转,内存下界是什么?
✓已复制微信号!