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

相关推荐
CHPCWWHSU2 天前
深入 llama.cpp:词汇表与分词——从文本到 Token (4)
人工智能·llm·llama·cpp·cudatoolkit
CHPCWWHSU7 天前
模型加载与初始化(3)
llm·llama·cpp·cudatoolkit
学技术的大胜嗷11 天前
一文讲透 OpenCV 的 forEach:Lambda、像素访问与性能优化
图像处理·opencv·cpp
niceffking17 天前
C++:initializer_list 与 {} 初始化的本质
开发语言·c++·cpp
bu_shuo21 天前
Visual C++2010学习版(全国计算机等级二级考试版)安装记录
c++·cpp·visual c++·计算机二级
bu_shuo21 天前
在命令行中编译cpp文件
开发语言·c++·cpp
CHPCWWHSU23 天前
llama-server - 从命令行到HTTP Server
llm·llama·cpp·cudatoolkit
CHPCWWHSU25 天前
初识llama.cpp - 轻量级推理引擎
llm·llama·cpp·cudatoolkit
70asunflower1 个月前
CUDA基础知识巩固检验练习题【附有参考答案】(5)
人工智能·cuda·cpp