题解 | #字符串排序#
字符串排序
http://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
该题开始的时候组做错了,没有考虑比较字母大小的时候直接插入会导致特殊字符的位置变动,
解题思路是先将字符串中的大小写字母筛选出来存储数组1,除此之外的存入数组2,数组2 需要记录特殊字符和其位置,对数组1进行排序后,将数组2的字符相继插入数组1,然后进行输出,这样特殊字符的位置就不会改变了
list1=[]
def numletter(i):
if i >='a' and i<='z':
return ord(i)-ord('a')+1
if i >='A' and i<='Z':
return ord(i)-ord('A')+1
while True:
try:
str1=input()
# print(s)
s=[]
str2=[]
for i in range(len(str1)):
if (str1[i]>='a' and str1[i]<='z') or (str1[i]>='A' and str1[i]<='Z'):
s.append(str1[i])
else:
str2.append([str1[i],i])
listtemp=[]
listtemp.append(s[0])
for i in range(1,len(s)):
flag=0
if (s[i] >='a' and s[i]<='z') or (s[i] >='A' and s[i]<='Z'):
for j in range(len(listtemp)):
if (listtemp[j] >='a' and listtemp[j]<='z') or (listtemp[j] >='A' and listtemp[j]<='Z'):
if numletter(s[i])<numletter(listtemp[j]):
flag=1
listtemp.insert(j,s[i])
break
else:
continue
if flag==0:
listtemp.append(s[i])
# print(listtemp)
if len(str2)!=0:
for i in str2:
listtemp.insert(i[1], i[0])
print(''.join(listtemp))
list1.append(''.join(listtemp))
except:
break
# for i in list1:
# print(i)
def numletter(i):
if i >='a' and i<='z':
return ord(i)-ord('a')+1
if i >='A' and i<='Z':
return ord(i)-ord('A')+1
while True:
try:
str1=input()
# print(s)
s=[]
str2=[]
for i in range(len(str1)):
if (str1[i]>='a' and str1[i]<='z') or (str1[i]>='A' and str1[i]<='Z'):
s.append(str1[i])
else:
str2.append([str1[i],i])
listtemp=[]
listtemp.append(s[0])
for i in range(1,len(s)):
flag=0
if (s[i] >='a' and s[i]<='z') or (s[i] >='A' and s[i]<='Z'):
for j in range(len(listtemp)):
if (listtemp[j] >='a' and listtemp[j]<='z') or (listtemp[j] >='A' and listtemp[j]<='Z'):
if numletter(s[i])<numletter(listtemp[j]):
flag=1
listtemp.insert(j,s[i])
break
else:
continue
if flag==0:
listtemp.append(s[i])
# print(listtemp)
if len(str2)!=0:
for i in str2:
listtemp.insert(i[1], i[0])
print(''.join(listtemp))
list1.append(''.join(listtemp))
except:
break
# for i in list1:
# print(i)