关于2025.10.13力扣每日的学习
我写的是,维护ans数组,然后用Counter比较异位,如果是异位,那么就保留第一个,不是则pass。
class Solution:def removeAnagrams(self, words: List[str]) -> List[str]:ans = []n = len(words)for i in range(n):if i== 0:ans.append(words[i])tmp_cnt = Counter(words[i])else:tmp = Counter(words[i])if tmp == tmp_cnt:pass else:ans.append(words[i])tmp_cnt = tmpreturn ans
然后学习灵神的代码,想快慢双指针的思想。
快指针负责寻找异位,如果有异位(当然这时候灵神用的sorted寻找异位),那么不管。如果没有,那么把此时的单词放在慢指针上面。
class Solution:def removeAnagrams(self, words: List[str]) -> List[str]:k = 1for s,t in pairwise(words):if sorted(s) != sorted(t):words[k] = tk += 1del words[k:]return words
然后我还是想成为一名cpp玩家,按照惯例学习一下cpp的语法。
先粘贴上灵神解法的cpp版本。
class Solution {
public:vector<string> removeAnagrams(vector<string>& words) {string base = "";int k = 0 ;for (auto& word:words){string s = word;ranges::sort(s);if (s != base){base = move(s);words[k++] = word;}}words.resize(k);return words;}
};
string这种类型定义我早已驾轻就熟,而我想学的是move函数和resize函数。
根据deepseek,move函数是为了避免不必要的拷贝,而把s的值转移给了base,方便后面重新初始化s。而resize函数,则是保留前k个元素。