# 替换所有的问号 \nPS:本技术文章中的代码使用Python,简单题,保证没有任何高技术力内容,男女老少皆宜。 \n \n## 事情来源 \n是这样的,这学期开头,信息技术老师Joeson向我推荐了一个网站——[力扣](https://leetcode.cn/)。 \n我进去看看,发现还挺有意思,于是就试了每日一题给我推荐的这道。 \n \n## 题目描述 \n给你一个仅包含小写英文字母和`'?'`字符的字符串`s`,请你将所有的`'?'`转换为若干小写字母,使最终的字符串不包含任何**连续重复**的字符。 \n注意:你**不能**修改非`'?'`字符。 \n题目测试用例保证**除**`'?'`字符**之外**,不存在连续重复的字符。 \n在完成所有转换(可能无需转换)后返回最终的字符串。如果有多个解决方案,请返回其中任何一个。可以证明,在给定的约束条件下,答案总是存在的。 \n \n**示例 1** \n \n> 输入:s = "?zs" \n> 输出:"azs" \n> 解释:该示例共有 25 种解决方案,从 "azs" 到 "yzs" 都是符合题目要求的。只有 "z" 是无效的修改,> 因为字符串 "zzs" 中有连续重复的两个 'z' 。 \n \n**示例 2** \n \n> 输入:s = "ubv?w" \n> 输出:"ubvaw" \n> 解释:该示例共有 24 种解决方案,只有替换成 "v" 和 "w" 不符合题目要求。因为 "ubvvw" 和 "ubvww" 都包含连续重复的字符。 \n \n## 清奇的思路 \n读完题目后我信心满满——只强调了不能***连续重复***,那么只需要有一个三个不同字母的列表,再分别排除列表中问号左右的字母(如果问号左右的字母在列表中的话),再从排除后的列表中随机抽一个字母出来,那就能保证不会连续重复。 \n \n## 简单的题解 \nPS:以下代码没考虑如何优化时间复杂度和空间复杂度,纯瞎写。 \n \n### 写法一 \n改编自我一个学期前写的答辩,~~那个写得太烂,还是不给看了~~。 \n``` \nclass Solution: \n    def modifyString(self,s:str)->str: \n        l=list(s) \n        e=len(l) \n        for i in range(e): \n            if l[i]=="?": \n                l[i]="awu".replace(l[i-1],"").replace(l[(i+1)%e],"")[0] \n        return "".join(l) \n``` \n \n### 写法二 \n似乎使用`replace()`会增加占用,于是研究出了如下方法,~~发现占用其实差不多,甚至更多~~。 \n``` \nclass Solution: \n    def modifyString(self,s:str)->str: \n        l=list(s) \n        e=len(l) \n        for i in range(e): \n            if l[i]=="?": \n                for d in "awu": \n                    if d not in [l[i-1],l[(i+1)%e]]: \n                        l[i]=d \n        return "".join(l) \n``` \n \n## 其他题解 \n看到别人写的,我人有点傻,~~几乎都特别长,而且用了e堆冷门函数~~。 \n也有特别短的,当然也特别复杂。 \n另外,如果想避免使用`(i+1)%e`这种离谱写法(这改自我写博客播放器时研究出来的首尾无限循环方法),可以采用虚节点——即在尾部插入任意字符。 \n \n### 改造写法一 \n``` \nclass Solution: \n    def modifyString(self,s:str)->str: \n        l=list(s+"e") \n        e=len(l)-1 \n        for i in range(e): \n            if l[i]=="?": \n                l[i]="awu".replace(l[i-1],"").replace(l[i+1],"")[0] \n        return "".join(l[:-1]) \n``` \n \n如果你也对题目感兴趣,可以使用任意语言将你的解答写在评论区(

评论区

发表评论

Tips|留下你的足迹吧!

快捷添加 (这功能有毛用)

awa!uwu!hi yoguru来了老弟~

浏览

所有评论

Burning - paperee


侧边栏出现了1次!

文章目录播放列表


©2022-2024 PAPEREE 萌ICP备20222057号

本博客所有文章遵循CC BY-NC-ND 4.0协议