深入探索串的高级操作:从算法到 LeetCode 实战

串是编程中最常用的数据结构之一,从简单的文本处理到复杂的文本匹配算法,串的应用无处不在。在掌握了串的基本概念、存储结构以及KMP算法之后,现在让我们深入探索串的更多高级操作,例如求子串、串的替换等,并通过LeetCode上的题目实战训练来进一步提升我们对串的处理能力。

一、串的高级操作

(一)求子串

概念 :从一个较长的字符串中提取一个连续的部分作为子串。例如,"hello world" 的子串可以是 "hello"、"world"、"lo wo" 等。

Python 实现 :在Python中,求子串非常简单,可以通过切片操作来实现。

python

def get_substring(s, start, length):

return sstart:start + length

示例

text = "hello world"

substring = get_substring(text, 6, 5) # 提取 "world"

print(substring) # 输出: world

(二)串的替换

概念 :在一个字符串中查找特定的子串,并将其替换为另一个字符串。例如,将字符串 "hello world" 中的 "world" 替换为 "everyone",结果为 "hello everyone"。

Python 实现 :Python 的 `str.replace()` 方法提供了强大的替换功能。

python

def replace_substring(s, old, new):

return s.replace(old, new)

示例

text = "hello world"

new_text = replace_substring(text, "world", "everyone")

print(new_text) # 输出: hello everyone

(三)字符串反转

概念 :将字符串中的字符顺序完全颠倒。例如,"hello" 反转后变为 "olleh"。

Python 实现 :可以通过切片操作或 `reversed` 函数来实现。

python

def reverse_string(s):

return s::-1

或者

def reverse_string(s):

return ''.join(reversed(s))

示例

text = "hello"

reversed_text = reverse_string(text)

print(reversed_text) # 输出: olleh

(四)字符串去重

概念 :去除字符串中的重复字符,只保留第一次出现的字符。例如,"abcabc" 去重后变为 "abc"。

Python 实现 :可以使用集合来记录已经出现过的字符。

python

def remove_duplicates(s):

seen = set()

result = \[\]

for char in s:

if char not in seen:

seen.add(char)

result.append(char)

return ''.join(result)

示例

text = "abcabc"

unique_text = remove_duplicates(text)

print(unique_text) # 输出: abc

二、LeetCode 实战题目训练

(一)【题目】:无重复字符的最长子串(LeetCode 3)

题目描述 :给定一个字符串,找出其中不含有重复字符的最长子串的长度。

解题思路 :使用滑动窗口技术。用两个指针表示一个窗口的左右边界,移动右边界扩展窗口,当遇到重复字符时,移动左边界收缩窗口。同时维护一个集合记录窗口内的字符,以及一个变量记录最长无重复子串的长度。

Python 实现 :

def length_of_longest_substring(s):

char_set = set()

left = 0

max_length = 0

for right in range(len(s)):

while sright in char_set:

char_set.remove(sleft)

left += 1

char_set.add(sright)

max_length = max(max_length, right - left + 1)

return max_length

示例

text = "abcabcbb"

print(length_of_longest_substring(text)) # 输出: 3

(二)【题目】:字符串中的第一个唯一字符(LeetCode 387)

题目描述 :给定一个字符串,找到第一个不重复的字符,并返回其在字符串中的位置。如果不存在,则返回 -1。

解题思路 :可以使用哈希表统计每个字符的出现次数,然后再次遍历字符串找到第一个出现次数为1的字符的位置。

Python 实现 :

def first_uniq_char(s):

char_count = {}

for char in s:

char_countchar = char_count.get(char, 0) + 1

for index, char in enumerate(s):

if char_countchar == 1:

return index

return -1

示例

text = "leetcode"

print(first_uniq_char(text)) # 输出: 0

(三)【题目】:字符串的排列(LeetCode 567)

题目描述 :给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。

解题思路 :使用滑动窗口和哈希表来解决。维护一个窗口,使窗口内的字符计数与 s1 的字符计数相匹配。如果匹配成功,则 s2 包含 s1 的排列。

Python 实现 :

def check_inclusion(s1, s2):

from collections import Counter

len1, len2 = len(s1), len(s2)

if len1 > len2:

return False

counter1 = Counter(s1)

counter2 = Counter(s2:len1)

if counter1 == counter2:

return True

for i in range(len1, len2):

counter2s2\[i] += 1

counter2s2\[i - len1] -= 1

if counter2s2\[i - len1] == 0:

del counter2s2\[i - len1]

if counter1 == counter2:

return True

return False

示例

s1 = "ab"

s2 = "eidbaooo"

print(check_inclusion(s1, s2)) # 输出: True

三、总结与交流

通过深入学习串的高级操作,包括求子串、串的替换、字符串反转和去重,我们进一步拓展了对串的处理能力。同时,通过在LeetCode上解决一系列与串相关的题目,我们不仅巩固了理论知识,还提升了解决实际问题的能力。

听听大家在学习串的高级操作和解决LeetCode题目过程中的体验和见解。有没有在解决某个题目时发现独特的解题思路?或者在实际项目中应用这些操作时遇到了什么挑战?欢迎在评论区分享你的故事,让我们一起交流学习,共同进步!

相关推荐
智者知已应修善业4 分钟前
【51单片机初始化D5-D8亮,每按键按下D1到D4全亮,再按下恢复,如此循环】2024-3-26
c++·经验分享·笔记·算法·51单片机
TickDB12 分钟前
Python 调用实时行情 API:ticker 返回成功后,如何校验字段再入库或展示
python·websocket·行情数据 api
AC赳赳老秦20 分钟前
OpenClaw 助力技术面试:自动生成面试题、模拟面试、整理面试知识点
开发语言·python·面试·职场和发展·自动化·deepseek·openclaw
Hali_Botebie24 分钟前
PyTorch 2.x核心变革torch.compile(),Triton 是其中最重要的 kernel 生成方式之一
人工智能·pytorch·python
8Qi830 分钟前
LeetCode 4:寻找两个正序数组的中位数 —— 二分查找法
java·算法·leetcode·职场和发展·二分查找
8Qi834 分钟前
LeetCode 32:最长有效括号 —— 栈 + 标记法 题解
java·数据结构·算法·leetcode·职场和发展··括号匹配
机器学习之心36 分钟前
198种组合算法+优化CNN-LSTM+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备
深度学习·算法·cnn-lstm·shap分析·198种组合算法
我登哥MVP36 分钟前
VS Code 安装 Claude Code 并接入 DeepSeek V4 Model
人工智能·python·node.js·agent·codex·deepseek·claude code
Tairitsu_H36 分钟前
[LC优选算法#3] 滑动窗口 | 将x减到0的最⼩操作数 | ⽔果成篮 | 字⺟异位词
c++·算法·leetcode·滑动窗口
AI行业学习41 分钟前
CC‑Switch v3.16.1-下载、配置、安装(2026‑06‑01 最新官方版)
开发语言·人工智能·windows·python