剑指 Offer 62. 圆圈中最后剩下的数字
0 1 2 3 4 5 6
0 1 2 4 5 6 第1次 删除3
0 1 2 5 6 第2次 删除4
0 1 2 6 第3次 删除5
0 1 2 第4次 删除6
… 第n次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def lastRemaining (n, m ): if n == 1 : return 0 return (lastRemaining(n - 1 , m) + m) % n def lastRemaining (n, m ): last = 0 for i in range (2 , n + 1 ): last = (last + m) % i return last
0003. 无重复字符的最长子串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 class Solution : def lengthOfLongestSubstring (self, s: str ) -> int : left = 0 right = 0 window = dict () ans = 0 while right < len (s): if s[right] not in window: window[s[right]] = 1 else : window[s[right]] += 1 while window[s[right]] > 1 : window[s[left]] -= 1 left += 1 ans = max (ans, right - left + 1 ) right += 1 return ans
0014. 最长公共前缀
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 """ 1、依次遍历所有字符串的每一列,比较相同位置上的字符是否相同。 如果相同,则继续对下一列进行比较。 如果不相同,则当前列字母不再属于公共前缀,直接返回当前列之前的部分。 2、如果遍历结束,说明字符串数组中的所有字符串都相等,则可将字符串数组中的第一个字符串作为公共前缀进行返回。 """ strs = ["flower" , "flow" , "flight" ] length = len (strs[0 ]) count = len (strs) for i in range (length): c = strs[0 ][i] for j in range (1 , count): if len (strs[j]) == i or strs[j][i] != c: result = strs[0 ][:i] result = strs[0 ]
0151. 反转字符串中的单词
1 2 s = " hello world " print (" " .join(sorted (s.strip().split(" " ),reverse=True )))
__END__