关注
#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();
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 你觉得面试是靠实力还是靠运气 #
26919次浏览 290人参与
# 哪些公司在招寒假实习? #
19745次浏览 257人参与
# MiniMax求职进展汇总 #
919次浏览 23人参与
# 秋招遇到的奇葩面试题 #
103076次浏览 421人参与
# 卷__卷不过你们,只能卷__了 #
13818次浏览 311人参与
# 互联网行业现在还值得去吗 #
49329次浏览 362人参与
# 26年哪些行业会变好/更差 #
21168次浏览 311人参与
# 写论文的崩溃时刻 #
7594次浏览 168人参与
# 秋招暂停,我将对以下公司做出处罚__ #
50164次浏览 200人参与
# 去年的flag与今年的小目标 #
11288次浏览 223人参与
# 通信硬件公司爆料 #
186650次浏览 548人参与
# 你不能接受的企业文化有哪些 #
14029次浏览 193人参与
# 有深度的简历长什么样? #
18107次浏览 368人参与
# 你都用AI做什么 #
7729次浏览 179人参与
# 入职第一天 #
11316次浏览 246人参与
# 关于春招你都做了哪些准备? #
122346次浏览 709人参与
# 国企vs私企,你更想去? #
306296次浏览 2494人参与
# 硬件/芯片公司工作体验 #
141955次浏览 939人参与
# 找工作中的小确幸 #
75638次浏览 439人参与
# 大家实习都在做什么? #
16646次浏览 224人参与
# 招聘要求与实际实习内容不符怎么办 #
149310次浏览 887人参与

