题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
虽然写出来了但是还是写的太复杂了
s = input()
# A-Z顺序排列
alpha_table = []
for i in range(26):
alpha_table.append(chr(ord("a")+i))
#排序
# 枚举法分离出字母&非字母
enumerate_s = []
for i in range(len(s)):
enumerate_s.append([i,s[i]])
alpha_list= []
for i in enumerate_s:
if i[1].isalpha():
alpha_list.append(i[1])
# 字母列表排序(冒泡)
for i in range(len(alpha_list)-1): # 交换轮数
for j in range(len(alpha_list)-1-i): # 交换次数
if alpha_table.index(alpha_list[j].lower()) > alpha_table.index(alpha_list[j+1].lower()):
alpha_list[j],alpha_list[j+1] = alpha_list[j+1],alpha_list[j]
# 按顺序插回字母位置
num = 0
for i in range(len(alpha_list)):
while 1:
if enumerate_s[i+num][1].isalpha():
enumerate_s[i+num][1] = alpha_list[i]
break
else:
num += 1
#输出结果
for i in range(len(enumerate_s)):
print(enumerate_s[i][1],end="")
后面才知道字符串可以直接比较不用自己创表,还有sorted函数的key的用法,化简一下:
s = input()
#排序
# 枚举法分离出字母&非字母
enumerate_s = []
for i in range(len(s)):
enumerate_s.append([i,s[i]])
alpha_list= []
for i in enumerate_s:
if i[1].isalpha():
alpha_list.append(i[1])
# 字母列表排序
alpha_list = sorted(alpha_list,key = lambda x:x.lower())
# 按顺序插回字母位置
num = 0
for i in range(len(alpha_list)):
while 1:
if enumerate_s[i+num][1].isalpha():
enumerate_s[i+num][1] = alpha_list[i]
break
else:
num += 1
#输出结果
for i in range(len(enumerate_s)):
print(enumerate_s[i][1],end="")