必备知识 使用标准库中的比较操作符== 标准库中的vector已经重载了==操作符,因此可以直接使用它来判断两个vector是否相等。两个vector相等的条件是它们的长度相同,并且对应位置的元素相等。 登录后复制 #include <vector> #include <iostream> int main() { std::vector<int> vec1 = {1, 2, 3}; std::vector<int> vec2 = {1, 2, 3}; std::vector<int> vec3 = {1, 2, 4}; if (vec1 == vec2) { std::cout << "vec1 and vec2 are equal." << std::endl; } else { std::cout << "vec1 and vec2 are not equal." << std::endl; } if (vec1 == vec3) { std::cout << "vec1 and vec3 are equal." << std::endl; } else { std::cout << "vec1 and vec3 are not equal." << std::endl; } return 0; } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22. 示例代码 登录后复制 class Solution { public: vector<int> findAnagrams(string s, string p) { vector<int> res,cnt_s(26),cnt_p(26); int sLen=s.size(),pLen=p.size(); if(pLen>sLen){ return res; } for(int i=0;i<pLen;i++){ //这里对cnt_s进行预操作,是为了让其里面的元素个数始终与cnt_p相同 cnt_s[s[i]-'a']++; cnt_p[p[i]-'a']++; } if(cnt_p==cnt_s){ res.push_back(0); } //i为m是因为前面0到m-1已经操作过了 for(int i=pLen;i<sLen;i++){ //新的元素进入 cnt_s[s[i]-'a']++; //旧的元素退出 cnt_s[s[i-pLen]-'a']--; if(cnt_p==cnt_s){ //i-plen是要退出的旧的元素,其退出后i-pLen+1是新一个滑动窗口的第一个元素 res.push_back(i-pLen+1); } } return res; } }; 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30. 效果展示 原创作者: u_15305087 转载于: https://blog.51cto.com/u_15305087/11517893