You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:31:35