必备知识

使用标准库中的比较操作符==
标准库中的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.

LeetCode---438. 找到字符串中所有字母异位词(两个类型和长度都相同的vector可以直接用=来比较是否相等)_i++

示例代码

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.

效果展示

LeetCode---438. 找到字符串中所有字母异位词(两个类型和长度都相同的vector可以直接用=来比较是否相等)_i++_02