传送门 T1重新格式化电话号码 思路 周赛经典的字符串处理题。难倒是不难,但是处理起来感觉比往期的签到题麻烦不少啊... 主要思路就是replace掉'-'与空格,然后每三个一组分片,塞进列表,最后再对单出来的元素特殊处理。 代码 ```python class Solution: def reformatNumber(self, number: str) -> str: number = number.replace('-', '').replace(' ', '') ans, N = [], len(number) for i in range(0, N, 3): ans.append(number[i:i+3]) if len(ans[-1]) == 1: last = ans.pop() sec_last = ans.pop() ans.append(sec_last[:2]) …
传送门 很经典的字符串问题。给定一个字符串,返回它最长且无重复字符的子串。 可以很直接的想到一个枚举的做法,两重循环遍历字符串去枚举子串,复杂度略小于O(n²),但肯定会超时。于是想到滑动窗口。 滑动窗口可以在母串上维护一个检索区间,从而避免因为匹配失败而导致的低效下标回溯操作。 具体来说,如果窗口右端检索到一个重复字符,那么左端收缩,直到不存在重复字符位置。每次滑动结束后维护ans字符串即可。 ```cpp class Solution { public: int lengthOfLongestSubstring(string s) { int n = s.size(); int ans = -INT_MAX, left = 0; unordered_setstr; if(!n) return 0; for(int right = 0; right < n; right++) { while(str.find(s[right]) != str.end()) { str.erase(s[left]); left++; } …