题解:
from collections import dequeclass Solution:def finalString(self, s: str) -> str:# 创建一个双端队列用于存储字符q = deque()# 定义一个标志位,用于标记当前字符应该添加到队列的哪一端head = False# 遍历输入的字符串s的每一个字符for ch in s:# 如果当前字符不是"i"if ch != "i":# 如果head为True,表示当前字符应该添加到队列的左端if head:q.appendleft(ch)# 如果head为False,表示当前字符应该添加到队列的右端else:q.append(ch)# 如果当前字符是"i"else:# 改变head的值,用于下一个字符的处理head = not head# 将队列中的字符连接起来,得到最终的字符串ans = "".join(q)# 如果最后一个字符应该添加到队列的左端,则将最终字符串反转if head:ans = ans[::-1]# 返回最终字符串return ans
算法讲解:
- 创建一个双端队列
q
和一个布尔变量head
,q
用于存储处理后的字符,head
用于标记当前字符应该添加到队列的哪一端。 - 遍历输入的字符串
s
的每一个字符。 - 如果当前字符不是"i",根据
head
的值将当前字符添加到队列的左端或右端。 - 如果当前字符是"i",则改变
head
的值,用于下一个字符的处理。 - 将队列
q
中的字符连接起来,得到最终的字符串ans
。 - 如果最后一个字符应该添加到队列的左端,则将最终字符串
ans
反转。 - 返回最终字符串
ans
。
解法二:
class Solution:def finalString(self, s: str) -> str:# 初始化一个空字符串用于存储处理后的结果res = ''# 遍历输入的字符串s的每一个字符for ele in s:# 如果当前字符不是"i",将其添加到结果字符串res中if ele != 'i':res += ele# 如果当前字符是"i",将结果字符串res反转else:res = res[::-1]# 返回处理后的结果字符串resreturn res
算法讲解:
- 初始化一个空字符串
res
用于存储处理后的结果。 - 遍历输入的字符串
s
的每一个字符。 - 如果当前字符不是"i",将其添加到结果字符串
res
中。 - 如果当前字符是"i",将结果字符串
res
反转。 - 返回处理后的结果字符串
res
。
请注意,这段代码在处理"i"字符时存在问题。当遇到第一个"i"时,它会将结果字符串res
进行反转,但是在后续的字符处理中,每次遇到"i"时都会反转一次,这不符合预期。
class Solution:def finalString(self, s: str) -> str:result = ""head = Falsefor ch in s:if ch != "i":if head:result = ch + result # 将字符插入到结果字符串的头部else:result += ch # 将字符插入到结果字符串的尾部else:head = not head # 遇到字符"i"时,切换head标志的值if head:result = result[::-1] # 如果最终head为True,说明还有一个字符需要插入到结果字符串的尾部,需要反转结果字符串return result