题目:
题解:
思路1:滑动窗口
- 使窗口每次滑动到下一个异位词即可,每次添加该窗口内的第一个字符串即可
思路2:栈
- 用栈来模拟相邻元素之间的删除操作,枚举字符串数组中的每个元素的时候,每次和栈顶元素比较是否为异位词,如果不是异位词就进行入栈操作。枚举结束后,栈中所有元素就是不相邻的所有异位词了。
代码如下:
// 思路 1 代码
class Solution {
public:
vector removeAnagrams(vector& ws) {
vector res;
int l=0,r=0,n=ws.size();
while(r
// 使窗口右指针移动到下一个异位词
while(r
sort(a.begin(),a.end()),sort(b.begin(),b.end());
return a==b;
}
};
// 思路 2 代码
class Solution {
public:
// 思路:使用栈模拟,对于相邻元素的性质来删除元素的题目,用栈来模拟即可
vector removeAnagrams(vector& w) {
vector res;
res.push_back(w.front());
int n=w.size();
// 枚举每一个元素,用来和res中的最后一个元素比较是否为异位词:不是就添加该字符串;是就跳过该字符串
for(int i=1;i
vector cnt(26,0);
for(char c:w[i])cnt[c-'a']++;
for(char c:res.back())cnt[c-'a']--;
// 26个字符中若某个字符的个数不为0,表示res[n-1]与w[i]不是异位词,则添加w[i]即可
for(int j:cnt)
if(j){res.push_back(w[i]);break;}
}
return res;
}
};


![[滑动窗口][栈]leetcode2273:移除字母异位词后的结果数组(easy) [滑动窗口][栈]leetcode2273:移除字母异位词后的结果数组(easy)](http://www.mshxw.com/aiimages/31/917263.png)
