仅以此纪录每日LeetCode所刷题目。
题目描述:
示例:
思路:
这道题我首先把26个字母放在数组中,虽然题目中说可以随意替换,但是我们还是按照顺序比较好。我们对题目中给定的字符串s进行遍历,遇到"?"就使用字母替换,注意字母不能和前后相邻的字母重复,因此我们讨论一下"?"所在的位置:若出现在开头,则避开第二个字符即可;若出现在结尾,则避开倒数第二个字符即可;若出现在中间,则需要避开前一个字符和后一个字符。最后排除一下特殊情况,那就是字符串中只有"?",出现这种情况我们返回a即可。
代码:
class Solution:
def modifyString(self, s: str) -> str:
if s == '?':
return 'a'
list1 = ['a','b','c','d','e',
'f','g','h','i','j',
'k','l','m','n','o',
'p','q','r','s','t',
'u','v','w','x','y',
'z']
for i in range(len(s)):
if s[i] == '?':
if i == 0:
for j in range(len(list1)):
if list1[j] != s[1]:
s = s.replace('?',str(list1[j]),1)
break
if i == len(s)-1:
for j in range(len(list1)):
if list1[j] != s[-2]:
s = s.replace('?',str(list1[j]),1)
break
if 0<i<len(s)-1:
for j in range(len(list1)):
if list1[j] != s[i-1] and list1[j] != s[i+1]:
s = s.replace('?',str(list1[j]),1)
break
return s