438 刷题和总结

想了一下,想要考初试第一,太 tm 难了。我还是老老实实目标 360 好了。不要给自己那么大的压力,细水长流慢慢来就完事了。

cpp 复制代码
class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        vector<int> count_s(26, 0);
        vector<int> count_p(26, 0);
        for ( auto& ch: p ) {
            count_p[ch - 'a']++;
        }
        vector<int> ans;
        int len_s = s.size();
        int len_p = p.size();
        if ( len_p > len_s ) {
            return ans;
        }
        for ( int i = 0; i < len_p; i++ ) {
            count_s[ s[i] - 'a' ]++;
        }
        if ( count_p == count_s ) {
            ans.push_back( 0 );
        }
        for ( int i = len_p; i < len_s; i++ ) {
            count_s[ s[i] - 'a' ]++;
            count_s[ s[ i - len_p ] - 'a' ]--;
            if ( count_p == count_s ) {
                ans.push_back( i - len_p + 1 );
            }
        }
        return ans;
    }
};

需要调一下边界情况就好了。本质上是看,一个固定的滑动窗口内部,里面出现的字母的频次,是否完全相等,然后的话,如果我们把窗口滑动,窗口的左边,一定是要移出的,也就是对应代码里面的频次减少 1.

移出的下标是 i - len_p ,窗口的左边是 i - len_p + 1

相关推荐
程序大视界7 天前
【C++ 从基础到项目实战】C++(六):拷贝控制——浅拷贝与深拷贝,兼谈智能指针
开发语言·c++·cpp
程序大视界7 天前
【C++ 从基础到项目实战】C++(二):数组、字符串与结构体——组织数据的容器
开发语言·c++·cpp
程序大视界7 天前
【C++ 从基础到项目实战】C++(五):类与对象基础——构造、析构与访问控制
开发语言·c++·cpp
程序大视界7 天前
【C++ 从基础到项目实战】C++(八):运算符重载——让你的类用起来像内置类型
开发语言·c++·cpp
程序大视界7 天前
【C++ 从基础到项目实战】C++(三):函数进阶——重载、回调、递归与默认参数
开发语言·c++·cpp
程序大视界7 天前
【C++ 从基础到项目实战】C++(九):友元与设计模式初探——打破封装的艺术
开发语言·c++·cpp
若苗瞬24 天前
记一次失败的本地部署 LLM MTP 模型的过程
llm·llama·cpp·gemma·mtp·ik_llama·dflash
CHPCWWHSU2 个月前
深入 llama.cpp:词汇表与分词——从文本到 Token (4)
人工智能·llm·llama·cpp·cudatoolkit
CHPCWWHSU2 个月前
模型加载与初始化(3)
llm·llama·cpp·cudatoolkit