1. 敏感字段加密算法解析与多语言实现
作为一名经历过多次华为OD机试的开发者,我深知字符串处理类题目在考试中的高频出现率。今天要拆解的这道"敏感字段加密"题目,正是2025B卷的经典题型,分值高达100分。这类题目考察的核心能力在于:如何在严格的时间/空间限制下,高效准确地完成特定模式的字符串匹配与处理。
1.1 题目核心需求拆解
我们需要处理的目标字符串可能包含多个由#S#和#E#标记的敏感字段,加密规则要求:
- 识别所有
#S#...#E#结构的子串 - 仅反转标记之间的内容(保留标记本身)
- 非敏感区域保持原样
关键约束条件需要特别注意:
- 字符串长度可能达到10^5量级(普通正则表达式可能超时)
- 前缀/后缀严格匹配且不会嵌套
- 必须考虑空敏感字段的情况(如
#S##E#)
提示:在实际机试中,处理超长字符串时务必注意避免使用
+=进行字符串拼接,这在Java/Python中会产生O(n^2)的时间复杂度。
1.2 算法设计思路
双指针扫描法(最优解)
python复制def encrypt_sensitive_fields(s: str) -> str:
result = []
i, n = 0, len(s)
while i < n:
if s[i:i+3] == '#S#':
j = i + 3
while j < n and s[j:j+3] != '#E#':
j += 1
# 反转敏感内容并保留标记
result.append('#S#' + s[i+3:j][::-1] + '#E#')
i = j + 3
else:
result.append(s[i])
i += 1
return ''.join(result)
时间复杂度分析:
- 单次线性扫描:O(n)
- 字符串拼接:O(n)(使用列表避免重复创建字符串)
- 总复杂度:O(n),完美满足题目约束
