题解:
from collections import deque
class 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]
# 返回处理后的结果字符串res
return res
算法讲解:
- 初始化一个空字符串
res
用于存储处理后的结果。 - 遍历输入的字符串
s
的每一个字符。 - 如果当前字符不是"i",将其添加到结果字符串
res
中。 - 如果当前字符是"i",将结果字符串
res
反转。 - 返回处理后的结果字符串
res
。
请注意,这段代码在处理"i"字符时存在问题。当遇到第一个"i"时,它会将结果字符串res
进行反转,但是在后续的字符处理中,每次遇到"i"时都会反转一次,这不符合预期。
class Solution:
def finalString(self, s: str) -> str:
result = ""
head = False
for 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