本帖最后由 jackz007 于 2025-2-27 16:39 编辑
参考这段代码:
- s = input("请输入一个字符串:")
- res = []
- for each in s:
- if res and res[-1].lower() == each.lower() and res[-1] != each:
- res.pop()
- else:
- res . append(each)
复制代码
下面通过举例进行讲解。
假如,你键入的是 "XABCcbaZ",s 有 8 个字符,这个循环将会循环 8 次,头 4 次循环由于 if 条件为 False,所以,执行 res . append(each) 指令的结果,使 s[0] - s[3] 依次进入 res,到第 5 次循环开始的时候,res = ['X' , 'A' , 'B' , 'C'],res[-1] = 'C',each = s[4] = 'c',、二者显然存在同一个字母的大小写关系,就是说,if 的条件为 True,于是,执行 res . pop(),第 5 次循环结束;第 6 次循环开始的时候,res = ['X' , 'A' , 'B'],res[-1] = 'B' ,each = s[5] = 'b',if 条件为 True,继续执行 res . pop(),第 6 次循环结束;第 7 次循环开始的时候,res = ['X' , 'A'],res[-1] = 'A' ,each = s[6] = 'a',if 条件为 True,继续执行 res . pop(),第 7 次循环结束;第 8 次循环开始的时候,res = ['X'],res[-1] = 'X',each = s[7] = 'Z',if 条件为 False,执行 res . append(each),第 8 次循环结束,最后,res = ['X' , 'Z']。
要实现题目要求的功能,使用列表代码最为简洁,当然,不使用列表也是完全可以的,下面的代码就没有用到列表
- s , k = input("请输入一个字符串:") , 1
- while k < len(s) :
- if s[k] == s[k - 1] . swapcase() :
- s = s[: k - 1] + s[k + 1 :] # 剔除 s[k - 1 : k + 1],重新合成 s
- if k > 1 : # 如果指针不在字符串开头
- k -= 1 # 指针回退 1 个字符,以便下一次循环可以检查拼接处两个字符构成的新组合
- else :
- k += 1
- print(s)
复制代码
运行实况:
- D:\[exercise]\Python>python x.py
- 请输入一个字符串:XABCcbaZ
- XZ
- D:\[exercise]\Python>
复制代码