classSolution: deflengthOfLongestSubstring(self, s: str) -> int: N = len(s) if N == 0or N == 1: return N L, R = -1, 0 h = {} # 慢指针L表示无重复区域的 左侧外边界 # 快指针R用来判断当前位置的值是否已经在哈希表中出现 gap = 0 # 有两种写法 # 写法1:在未遇到重复字符之前,一直更新区间长度 # 遇到重复值时,不更新区间长度,而是更新L边界 for R inrange(N): # 如果s[R]未出现过, 或者索引位于L左侧, 即当前考察区域更左 # 说明当前连续未重复区域仍未中断, 可以更新一下gap if s[R] notin h or h[s[R]] <= L: gap = max(gap, R-L) else: # L 指向重复元素已经记录的索引位置 # 相当于将该元素排除出去,新区间从该元素右侧开始考察 L = h[s[R]] h[s[R]] = R return gap
''' # 写法2: 在遇到重复元素的时候,才计算一次区间长度 for R in range(N): if s[R] in h and h[s[R]] > L: # 出现重复字符时,才计算区间长度,要注意当前位置不算在区间内 gap = max(gap, R-L -1) L = h[s[R]] h[s[R]] = R # 这里要注意需要补充计算一下最后一段区间的长度 # 因为R取不到N,否则会漏算最后一段符合条件的区间 # 比如:若最后一段区间直到N-1都没有出现重复字符,是该计算长度的 # 但是由于计算的条件是出现重复字符才计算,所以上面并没有机会去计算 return max(gap, N-L-1) '''
classSolution: defisPalindrome(self, s: str) -> bool: # 先将所有字母转换为小写 s = s.lower() L, R = 0, len(s)-1 while L < R: # while L < R and not (s[L].isalpha() or s[L].isdigit()): while L < R andnot s[L].isalnum(): L += 1 # while L < R and not (s[R].isalpha() or s[R].isdigit()): while L < R andnot s[R].isalnum(): R -= 1 if L < R: if s[L] == s[R]: L += 1 R -= 1 else: returnFalse returnTrue
defadd_num_list(num_list): # # 对2个数字字符串相加的code稍加修改 # 即可得到对 N 个数字字符串相加的code # 当然也可以不做修改,使用2数相加,只需要对每一次做乘法得到的结果,及时应用两数相加即可 # num_cnt = len(num_list) len_num = [len(num) for num in num_list] k = 1 plus = 0 s = '' while plus > 0or k <= max(len_num): a = 0 for i inrange(num_cnt): N_i = len_num[i] '''要点1.是对第i个数字的倒数第k位取值''' a += int(num_list[i][N_i-k]) if k<= N_i else0 # print(k,a) '''要点2.这下面的几行要写在for循环之外 因为for循环结束后,对应位置的数字才相加完毕''' digit = (a+plus) % 10 # print(digit) s = str(digit) + s plus = (a+plus-digit) // 10 k += 1 return s
if num1 == "0"or num2 == "0": return"0" else: num_list = [] m, n = len(num1), len(num2) for j inrange(1,n+1): # 对num2从个位开始取数 '''要点3.当j是来自十位、百位、千位...时,屁股后要接上相应个数的0''' res = "0"*(j-1) b = int(num2[n-j]) plus = 0 for i inrange(1,m+1): a = int(num1[m-i]) digit = (plus + a*b) % 10 res = str(digit) + res plus = (plus + a*b -digit) // 10 '''要点4.for循环玩之后,plus不用留到下一轮,因为该阶段的相加已经结束了 直接加到数前面去即可''' if plus > 0: res = str(plus) + res num_list.append(res) print(num_list) return add_N_num(num_list) ############################################################################## # 每一次只对两个数字字符串相加,时间上稍微慢一点