关注
#include <iostream>
(30316)#include <unordered_map>
#include <cassert>
// 使用标准命名空间
using namespace std;
bool isPermutationSubstring(const string& s1, const string& s2) {
size_t len_s1 = s1.length();
size_t len_s2 = s2.length();
// 如果s1的长度大于s2,不可能是子串
if (len_s1 > len_s2) {
return false;
}
// 使用哈希表存储字符计数
unordered_map<char, int> charCountS1;
unordered_map<char, int> charCountWindow;
// 初始化s1的字符计数
for (size_t i = 0; i < len_s1; ++i) {
++charCountS1[s1[i]];
++charCountWindow[s2[i]];
}
// 滑动窗口
for (size_t i = 0; i < len_s2 - len_s1; ++i) {
if (charCountS1 == charCountWindow) {
return true;
}
// 移动窗口
++charCountWindow[s2[i + len_s1]];
--charCountWindow[s2[i]];
}
// 最后一次比较
return charCountS1 == charCountWindow;
}
// 测试函数
void check() {
assert(isPermutationSubstring("abc", "cbabadcbbabbcbabaabccbabc") == true);
assert(isPermutationSubstring("test", "esttest") == true);
assert(isPermutationSubstring("hello", "world") == false);
assert(isPermutationSubstring("a", "ab") == true);
assert(isPermutationSubstring("aa", "a") == false);
cout << "All tests passed!" << endl;
}
// 如果不需要主函数,可以将测试函数直接放在代码末尾
check();
查看原帖
点赞 评论
相关推荐
03-21 11:58
湖北大学知行学院 前端工程师 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 春招/暑实第一面是哪家? #
29158次浏览 307人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
6189次浏览 32人参与
# 巨人网络春招 #
10882次浏览 164人参与
# 腾讯音乐求职进展汇总 #
159916次浏览 1100人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
185623次浏览 1103人参与
# 小红书求职进展汇总 #
226269次浏览 1351人参与
# MiniMax求职进展汇总 #
21115次浏览 273人参与
# 硬件人秋招的第一个offer #
122268次浏览 1453人参与
# 实习到现在,你最困惑的一个问题 #
31153次浏览 271人参与
# 如果重来一次你还会读研吗 #
228958次浏览 2009人参与
# 网易游戏笔试 #
6059次浏览 83人参与
# 职能管理面试记录 #
10376次浏览 57人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
6077次浏览 151人参与
# 正在春招的你,也参与了去年秋招吗? #
361641次浏览 2628人参与
# 硬件应届生薪资是否普遍偏低? #
108122次浏览 601人参与
# 简历中的项目经历要怎么写? #
308383次浏览 4094人参与
# 工作中遇到的歹人 #
96258次浏览 535人参与
# 我的AI电子员工 #
34078次浏览 223人参与
# 校招笔试 #
461085次浏览 2943人参与
# AI时代,哪些岗位最容易被淘汰 #
60763次浏览 639人参与
# 你怎么看待AI面试 #
178369次浏览 1080人参与
# 如何一边实习一边找下家? #
40022次浏览 349人参与
