Mirror Characters of a String in Java

2025年3月31日 | 阅读 5 分钟

镜像字符串的字符会用字母表中相反位置的对应字符替换每个字母(例如,“a”变成“z”,“b”变成“y”)。大写和小写字母保留其大小写,非字母字符保持不变。这种技术在编码和文本转换中很有用。

示例 1

输入

N = 2

hello

输出

heovv

(镜像从第 2 个位置开始)

示例 2

输入

N = 4

programming

输出

progmlmtorn

(镜像从第 4 个位置开始)

示例 3

输入

N = 5

fantastic

输出

fantzghxr

(镜像从第 5 个位置开始)

方法:数学字符映射

数学字符映射通过使用算术运算根据字母表中的位置计算出字符的镜像对应字符来实现。这种方法利用 ASCII 值高效地将每个字符替换为其对位字符,从而无需额外的数据结构即可轻松实现。

算法

步骤 1:输入一个包含大写字母、小写字母和非字母字符混合的 字符串

步骤 2:创建一个名为 `mirrored` 的 `StringBuilder` 以高效地构建镜像字符串。

步骤 3:对于每个字符 `ch`:a. **检查 `ch` 是否为小写字母:**

  • 如果 `ch` 在 'a' 和 'z' 之间,则使用以下公式计算镜像字符:
    • `mirroredChar = (char) ('z' - (ch - 'a'))` b. **检查 `ch` 是否为大写字母:**
  • 如果 `ch` 在 'A' 和 'Z' 之间,则使用以下公式计算镜像字符:
    • `mirroredChar = (char) ('Z' - (ch - 'A'))` c. **如果 `ch` 不是字母:**
  • 按原样将其附加到 `mirrored`(无需转换)。

步骤 4:确定镜像字符(或未更改的非字母字符)后,将其附加到镜像字符串。

步骤 5:处理完所有字符后,将 `StringBuilder` 转换为字符串并返回。

实施

文件名:MirrorCharacters.java

输出

 
zyxCBA   

时间复杂度:O(n),其中 n 是输入字符串的长度。

辅助空间复杂度:O(n),用于存储镜像结果。

方法:使用映射

使用 HashMap 将每个字母字符分配给其对应的镜像字符(例如,“a”映射到“z”,“b”映射到“y”)。该程序通过使用 `StringBuilder` 来操作输入字符串,从而查找并用映射中的镜像字符替换每个字符,从而创建一个新的镜像字符串。

算法

步骤 1:从输入字符串开始(例如,“abcXYZ”)。

步骤 2:调用 `mirrorString()` 函数并传入输入字符串,以生成其镜像版本。

步骤 3:在 `mirrorString()` 函数中,首先调用 `createMirrorMap()` 来创建一个定义字符镜像关系的映射。

步骤 4:初始化一个 `HashMap` 来存储每个字符到其镜像对应字符的映射。

步骤 5:在 `mirrorString()` 函数中,使用 `StringBuilder` 来构建输入字符串的镜像版本。

  • 对于输入字符串中的每个字符 `ch`
    • 如果该字符存在于镜像映射中
      • 将镜像字符(来自映射)附加到 `StringBuilder`。
    • 如果字符不存在于镜像映射中(例如,非字母字符),则按原样附加该字符。
  • 将 `StringBuilder` 转换为字符串并返回镜像字符串。

实施

文件名:MirrorCharactersUsingMap.java

输出

 
zyxCBA   

时间复杂度:O(n),其中 n 是输入字符串的长度。

辅助空间复杂度:O(n),用于存储镜像字符串。