问题描述
小C 需要对一个字符串进行特殊排序,这个字符串只包含三种字符类型:字母(大小写)、数字和问号。要求你按照以下规则进行排序:
- 问号的原始位置必须保持不变。
- 数字的原始位置必须保持不变,但数字要按照从大到小排序。
- 字母的原始位置必须保持不变,但字母要按照字典序从小到大排序。
你需要编写一个程序,帮助小C实现这个字符串的排序功能。
代码
def solution(inp):
# Edit your code here
ls = list(inp)
ld = []
la = []
for ch in ls:
if ch.isdigit():
ld.append(ch)
elif ch != '?':
la.append(ch)
ld.sort()
la.sort(reverse=True)
for i in range(len(ls)):
if ls[i].isdigit():
ls[i] = ld.pop()
elif ls[i] != '?':
ls[i] = la.pop()
return ''.join(ls)
if __name__ == "__main__":
# Add your test cases here
print(solution("12A?zc") == "21A?cz")
print(solution("1Ad?z?t24") == "4Ad?t?z21")
print(solution("???123??zxy?") == "???321??xyz?")