LeetCode提交报错TypeError:str与int无法比较,本地运行正常求助
解决LeetCode平衡字符串分割的报错问题
嘿,我懂这种本地跑没问题但提交就报错的郁闷感!咱们来一步步揪出问题根源,然后搞定它~
报错原因拆解
你遇到的TypeError: '<' not supported between instances of 'str' and 'int',完全是代码里的语法逻辑错误导致的:
- 第一处错误(Line7):
if s[i] != s[(i + 1) <= len(s)]
这里的(i + 1) <= len(s)会返回一个布尔值(True或False),而Python里布尔值是整数的子类(True=1,False=0),所以你实际是在拿s[1]或s[0]和s[i]比较,这完全偏离了你原本想判断i+1是否在范围内再取对应字符的逻辑。 - 第二处错误(Line12、Line13):
第一行里的if s[x] == s[x + 1 < len(s[i::])]: if s[x] == s[x + 1] < len(s[i::]):x + 1 < len(s[i::])是布尔值,你用它当索引取字符串元素,逻辑完全错误;第二行里s[x] == s[x + 1]返回布尔值,再和整数类型的len(s[i::])做<比较,这直接触发了字符串和整数无法比较的类型错误——这就是LeetCode提示的问题核心!
修正后的简洁解法
其实这个问题不需要复杂的嵌套循环,用一个平衡计数器就能轻松解决:每遇到L就加1,遇到R就减1,每当计数器归0,就说明找到了一个完整的平衡子串,直接计数加1即可。代码如下:
class Solution: def balancedStringSplit(self, s: str) -> int: count = 0 balance = 0 # 平衡计数器:L加1,R减1 for char in s: balance += 1 if char == 'L' else -1 if balance == 0: count += 1 return count
这个方法时间复杂度是O(n),空间复杂度O(1),完全符合题目要求,而且不会有任何语法或逻辑漏洞。
为什么本地没报错?
大概率是你本地测试的用例刚好没触发那些非法比较的边界场景,比如测试用例都是短字符串、i+1始终在有效索引范围内,但LeetCode的测试用例覆盖了这些极端情况,所以暴露了问题。
内容的提问来源于stack exchange,提问作者user12150264
相关产品推荐
相关产品推荐

