CodeTop-0203Day02

Two Problem

  1. 整数反转: https://leetcode.cn/problems/reverse-integer/
  2. 无重复字符的最长子串: https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/

Q1: 整数反转

本来想用字符串反转的,后来发现“不允许 64 位整数”限制,那么在构建结果时会面临溢出问题.
而且发现没有注意返回值是int, 哈哈,本来甚至直接返回字符串了->要仔细审题哦~

Answer One: 逐位弹出+数值构造(每次更新前做溢出预判)

class Solution:
    def reverse(self, x: int) -> int:
        # 边界定义
        INT_MAX=2**31-1     # 2147483640 + 7
        INT_MIN=-2**31      # -2147483648
        
        # 计算符号
        sign = -1 if x < 0 else 1
        # 边界值限制
        limit = INT_MAX%10 if sign == 1 else abs(INT_MIN)%10
        x=abs(x)

        # 每次计算一位数字, 累加到ans中
        res = 0        
        while x:
            digit = x%10
            x//=10
            # 先判断再计算, 避免计算结束后进不了下一轮循环直接输出导致溢出
            if res > INT_MAX//10 or ( res == INT_MAX//10 and digit > limit ): return 0
            res = res*10+digit
        
        # 添加符号
        res *=sign
		# 返回结果
        return res

Q2: 无重复字符的最长子串

通过滑动窗口解决连续区间问题

Answer One: 滑动窗口(set实现)

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        # set做滑动窗口
        seen = set()
        l = 0
        ans = 0

        for r in range(len(s)):
            # 右边界重复时候, 重置左边界:直到删除到set中没有右边界为止
            while s[r] in seen:
                seen.remove(s[l])
                l += 1
            # 加入右边界并更新ans
            seen.add(s[r])
            ans = max(ans, r-l+1)
        
        return ans

Answer Two: 滑动窗口(哈希表dict实现)

用哈希表(dict) 记录“最后出现位置”, 解决set遇到重复,要一格一格删的问题

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        # 哈希表(dict)做滑动窗口
        # 存储: <字符,索引> - <ch,idx>
        last = {}
        l = 0
        ans = 0

        for r, ch in enumerate(s):
            # 字符在窗口内, 即窗口内有重复, 则跳过此重复字符
            if ch in last and last[ch] >= l:
                l = last[ch] + 1
            # 记录新值
            last[ch] = r
            ans = max(ans, r-l+1)
        
        return ans

Happy Ending

回忆起了滑动窗口的日子,呜呜
晚上吃完饭想起来忘记打卡了, 睡前补齐~~
另外, 今天迫于生计, 学会了将飞书文档转换成.md下载,不想上班,😭
附github地址: https://github.com/dicarne/feishu-backup?tab=readme-ov-file

---XTian by 202602032323

posted @ 2026-02-03 23:27  筱天丶  阅读(9)  评论(0)    收藏  举报