defno_extra_space_swap(a,b):""" 不能构建额外空间, 那么交换移动元素使用位操作的那个版本 swap() 原理是异或了 2 次相当于没有异或 :param a: 'a' :param b: 'b' :return: 'b', 'a' """ a, b =ord(a),ord(b) a ^= b b ^= a a ^= breturnchr(a),chr(b)defpost_order_move(s):""" 把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 :param s: "AkleBiCeilD" :return: "kleieilABCD" """ s =list(s) last =len(s)-1for i inrange(last, -1, -1):if s[i].islower():continueelse: s[i], s[last]=no_extra_space_swap(s[i], s[last])for j inrange(i, last -1): s[j], s[j +1]=no_extra_space_swap(s[j], s[j +1]) last -=1return"".join(s)import sysfor line in sys.stdin: a = line.strip()printpost_order_move(a)