given a string,that contains special character together with alphabets(
“a” to “z” and “A” to “Z”), reverse the string in a way that special characters are not affected
思路: 把反转后的字符回填到原来的字符串中
def reversed_char(string):
strs = string[::-1]
length = len(strs)
#mark = "".join((chr(i) for i in range(97, 123))) + "".join(chr(i) for i in range(65, 91))
mark = "".join(tuple(chr(i) for i in range(97,123))+ tuple(chr(i) for i in range(65,91)))
temp = list(string)
res = "" # 保存反转后字母
for i in range(length):
if strs[i] not in mark:
continue
res += strs[i]
# 把原始字符串对应位置的字母换成"_"
for i in range(length):
if string[i] in mark:
temp[i] = "-"
# 逆序字母的回填
index = 0
for item in res:
while temp[index] != "-":
index += 1
temp[index] = item
index += 1
print(f'output: str = {"".join(temp)}')
if __name__ == '__main__':
reversed_char("Ab,c,de!$")
– 优化一下
def reversed_char(string):
strs = string[::-1]
length = len(strs)
#mark = "".join((chr(i) for i in range(97, 123))) + "".join(chr(i) for i in range(65, 91))
mark = "".join(tuple(chr(i) for i in range(97,123))+ tuple(chr(i) for i in range(65,91)))
temp = list(string)
res = "" # 保存反转后字母
for i in range(length):
if strs[i] not in mark:
continue
res += strs[i]
# 把原始字符串对应位置的字母换成"_"
# for i in range(length):
# if string[i] in mark:
# temp[i] = "-"
# 逆序字母的回填
index = 0
for i in res:
while temp[index] not in mark: # 说明 ",$"不替换
index += 1
temp[index] = i
index += 1
print(f'output: str = {"".join(temp)}')



