题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个字符串,现在规定要删除串内所有相邻的字母不能是一个小写,另一个大写的情况,返回处理后的结果。

思路分享

  • 处理的基本思路与昨天的 【Leetcode Daily】1047删除字符串中的所有相邻重复项 一模一样,不过这里有一个值得说一下的是如何判断一个小写另一个大写。

  • 如果用位运算的话,确实能通过特定位的变化来检测,大小写相差 32 来着(ASCII),那么取异或运算后,第五位必定为 1。但普通一些的方法也有,一个是按照题目所说,规定一个小写另一个大写就弹,这也是下面参考中被注释的一行;另一个聪明一些的写法是,检测两个字母的小写形式相同,且两个字母不同,那就必定为一个小写另一个大写。

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
class Solution:
def makeGood(self, s: str) -> str:
stk = list()
for c in s:
# if stk and ((c == stk[-1].upper() and stk[-1] == stk[-1].lower()) or (c == stk[-1].lower() and stk[-1] == stk[-1].upper())):
if stk and (c.lower() == stk[-1].lower() and c != stk[-1]):
stk.pop()
else:
stk.append(c)
return "".join(stk)