当前位置:首页 > 技术 > 正文内容

字符串处理经典算法题解析与实现

访客 技术 2026年5月24日 3

反转字符数组

题目要求将给定的字符数组内容原地反转,即不能使用额外的数组空间。解决方案采用双指针技术:一个指针从起始位置开始,另一个从末尾出发,两者逐步向中间靠拢,同时交换对应位置的字符。

class Solution:
    def reverseArrayInPlace(self, chars: List[str]) -> None:
        start = 0
        end = len(chars) - 1
        while start < end:
            chars[start], chars[end] = chars[end], chars[start]
            start += 1
            end -= 1

时间复杂度为 O(n),其中 n 是字符数量;空间复杂度为 O(1),仅使用了常量级辅助变量。

按规则翻转子串

给定字符串 s 和整数 k,每 2k 个字符为一组,对每一组的前 k 个字符进行反转。若剩余字符不足 k 个,则全部反转;若在 k 到 2k 之间,只反转前 k 个。

实现方式是通过索引步进,每次前进 2k 步,并利用切片操作完成局部逆序。

class Solution:
    def reverseSegments(self, s: str, k: int) -> str:
        index = 0
        result = list(s)
        while index < len(result):
            left = index
            right = min(index + k - 1, len(result) - 1)
            # Reverse manually to simulate in-place behavior
            while left < right:
                result[left], result[right] = result[right], result[left]
                left += 1
                right -= 1
            index += 2 * k
        return ''.join(result)

数字替换为指定字符串

输入一个混合了小写字母和数字的字符串,需将所有数字字符替换为 "number" 字符串。由于 Python 中字符串不可变,应先转换为列表处理,最后再合并成字符串输出。

s = input().strip()
chars = list(s)
for i in range(len(chars)):
    if chars[i].isdigit():
        chars[i] = 'number'
print(''.join(chars))

逆序单词排列

目标是将句子中单词的顺序颠倒,但每个单词内部保持不变。同时需要去除多余的空格(包括首尾和中间多个空格),最终以单个空格分隔各单词。

首先使用 strip() 去除两端空白,split() 按任意空白分割得到单词列表,然后用双指针交换实现逆序。

class Solution:
    def reverseWordOrder(self, sentence: str) -> str:
        words = sentence.strip().split()
        left = 0
        right = len(words) - 1
        while left < right:
            words[left], words[right] = words[right], words[left]
            left += 1
            right -= 1
        return ' '.join(words)

右旋字符串操作

将字符串末尾的 k 个字符移动到开头,形成新的字符串。设总长度为 n,则新字符串由后 k 个字符拼接上前 n-k 个字符构成。

k = int(input())
text = input().strip()
n = len(text)
rotated = text[n - k:] + text[:n - k]
print(rotated)
标签: 字符串操作

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。