3. 字符串题常见解法怎么总结
字符串题是测试岗手撕代码中非常高频的题型。字符串在测试工作中也很常见,比如处理接口字段、Token、日志、文件路径、错误提示、手机号脱敏、订单号解析等。面试中的字符串题通常不会特别难,但很容易考察边界、索引、字符统计、双指针和滑动窗口。
准备字符串题,重点掌握:反转字符串、判断回文、统计字符次数、找第一个不重复字符、判断字符串是否包含、最长无重复子串、字符串压缩、大小写处理。写字符串题时,一定要考虑空字符串、单字符、大小写、空格、特殊字符和中文字符等情况。
一、字符串题先确认什么
拿到题目先问:
- 输入是否可能为空;
- 是否区分大小写;
- 是否包含空格;
- 是否包含数字和特殊字符;
- 是否只处理英文;
- 是否需要原地修改;
- 返回字符串、布尔值还是下标;
- 是否要求时间复杂度。
这些条件会影响代码。
二、反转字符串
可以用双指针,也可以用切片。面试中建议能讲双指针。
def reverse_string(s):
chars = list(s)
left, right = 0, len(chars) - 1
while left < right:
chars[left], chars[right] = chars[right], chars[left]
left += 1
right -= 1
return "".join(chars)
边界:空字符串、单字符、奇数长度、偶数长度。
三、判断回文字符串
回文是正读反读一样。
def is_palindrome(s):
left, right = 0, len(s) - 1
while left < right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
如果题目要求忽略大小写和空格,需要先清洗字符串。
四、统计字符出现次数
使用字典最方便。
def char_count(s):
count = {}
for ch in s:
count[ch] = count.get(ch, 0) + 1
return count
适合题:字符频次、找重复字符、判断两个字符串是否由相同字符组成。
五、找第一个不重复字符
思路:先统计次数,再按原字符串顺序找第一个次数为 1 的字符。
def first_unique_char(s):
count = {}
for ch in s:
count[ch] = count.get(ch, 0) + 1
for i, ch in enumerate(s):
if count[ch] == 1:
return i
return -1
注意返回的是字符还是下标,要看题目要求。
六、最长无重复子串
这是滑动窗口经典题。
def length_of_longest_substring(s):
seen = {}
left = 0
max_len = 0
for right, ch in enumerate(s):
if ch in seen and seen[ch] >= left:
left = seen[ch] + 1
seen[ch] = right
max_len = max(max_len, right - left + 1)
return max_len
测试用例:
abcabcbb -> 3
bbbbb -> 1
pwwkew -> 3
空字符串 -> 0
七、字符串压缩
例如 aaabbc 压缩成 a3b2c1。
def compress(s):
if not s:
return ""
result = []
count = 1
for i in range(1, len(s)):
if s[i] == s[i - 1]:
count += 1
else:
result.append(s[i - 1] + str(count))
count = 1
result.append(s[-1] + str(count))
return "".join(result)
边界:空字符串、单字符、全部相同。
八、字符串题常见坑
1. 忘记空字符串
很多题空字符串应该返回空、0 或 True,要看题目定义。
2. 下标越界
访问 s[i + 1] 时要注意边界。
3. 没有确认大小写
A 和 a 是否算一样,要问清。
4. 没有处理空格和特殊字符
回文题经常会要求忽略非字母数字字符。
5. Python 字符串不可变
频繁拼接建议用列表收集后 join。
九、测试用例怎么补
字符串题可以补:
- 空字符串;
- 单字符;
- 全部相同;
- 没有重复;
- 有空格;
- 有大小写;
- 有数字;
- 有特殊字符;
- 中文字符;
- 长字符串。
十、面试回答模板
如果面试官问“字符串题常见解法怎么总结”,可以这样回答:
字符串题我会先确认是否为空、是否区分大小写、是否包含空格和特殊字符。常见解法有双指针、字典计数和滑动窗口。比如反转字符串和判断回文适合双指针;统计字符出现次数、找第一个不重复字符适合用字典;最长无重复子串适合滑动窗口。写完后会用空字符串、单字符、全部重复、大小写和特殊字符这些边界验证。
十一、练习清单
- 反转字符串;
- 判断回文;
- 统计字符次数;
- 第一个不重复字符;
- 判断两个字符串是否异位词;
- 最长无重复子串;
- 字符串压缩;
- 替换空格;
- 判断是否包含子串;
- 手机号脱敏。
字符串题的关键是索引、边界和字符处理。测试岗回答时要主动补充异常输入和边界用例。
配套刷题:

