1417. 重新格式化字符串
给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。
请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。
请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。
输入:s = "a0b1c2"
输出:"0a1b2c"
解释:"0a1b2c" 中任意两个相邻字符的类型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是满足题目要求的答案。
class Solution:
def reformat(self, s: str) -> str:
sumDigit = sum(c.isdigit() for c in s)
sumAlpha = len(s) - sumDigit
# 无法按要求形成字符串
if abs(sumDigit - sumAlpha) > 1:
return ""
# 确定数字和字符的数量哪个居多,默认数字较多
flag = sumDigit > sumAlpha
# 将字符串转为列表,方便移位操作
t = list(s)
j = 1
# 使用双指针
for i in range(0, len(s), 2):
# 当i位置不是数字,则需要往后遍历,找到可替换的数字
if t[i].isdigit() != flag:
while t[j].isdigit() != flag:
j += 2
# 交换位置
t[i], t[j] = t[j], t[i]
return ''.join(t)
1、使用了双指针这一思想,可以有效减少移位操作
2、flag标识操作可提高程序的通用性








网友评论