题解 | #字符串合并处理#
字符串合并处理
https://www.nowcoder.com/practice/d3d8e23870584782b3dd48f26cb39c8f
s = input()
s_list = s.split()
# 1.将输入的两个字符串str1和str2进行前后合并
str3 = '' # 合并字符串
for i in s_list:
str3 += i
# 2.对合并后的字符串进行排序
# - 下标为奇数的字符和下标为偶数的字符分别从小到大排序(下标:字符串中的位置,从0开始)
# - 再依次分别放回原串中的偶数位和奇数位
list_0 = [] # 存偶数位
list_1 = [] # 存奇数位
for i in range(len(str3)): # 遍历字符串,分别存储奇、偶数位置的字符
if i % 2 == 0:
list_0.append(str3[i])
else:
list_1.append(str3[i])
l_0 = sorted(list_0) # 对偶数位置部分排序
l_1 = sorted(list_1) # 对奇数位置部分排序
n, m = 0, 0 # n, m 分别指向偶数、奇数需要插入的下一个元素位置
str4 = '' # 存储合并的排序后字符串
for i in range(len(str3)):
if i % 2 == 0:
str4 += l_0[n]
n += 1
else:
str4 += l_1[m]
m += 1
# 转换操作:对以上需要进行转换的字符所代表的十六进制用二进制表示并倒序,然后再转换成对应的十六进制大写字符
ans = ''
for i in str4:
if i.isalpha(): # 对于字母
if 'a' <= i <= 'f' or 'A' <= i <= 'F': # a-f, A-F这些字母
n = int(i, 16) # 转换成16进制对应的十进制整数
n_s = str(bin(n))[2::].zfill(4)[::-1] # 转换成二进制,再转换成字符串,最后切片去除二进制前缀0b以及逆序
'''
上面一行代码:
1. 利用bin()函数转换成二进制,再通过str()函数转换成字符串
2. 利用切片[2::]去掉二进制前面的0b
3. 利用zfill()函数在前面补0到4位二进制数
4. 利用切片[::-1]使该二进制字符串逆序
'''
m = str(hex(int(n_s, 2)))[:1:-1]
ans += m.upper() # 将字母改为大写形式
else: # 其他字母
ans += i
else: # 对于数字
n = int(i, 16)
n_s = str(bin(n))[2::].zfill(4)[::-1]
m = str(hex(int(n_s, 2)))[:1:-1]
ans += m.upper()
print(ans)
CVTE公司福利 672人发布