关注
#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();
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
02-20 18:25
蚌埠坦克学院 网络安全 点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 笔试 #
2039195次浏览 23215人参与
# 互联网回暖,腾讯要招5000人! #
6546次浏览 93人参与
# 腾讯音乐26届实习 #
150686次浏览 905人参与
# 牛友故事会 #
172285次浏览 2906人参与
# 技术岗笔试题求解 #
26791次浏览 401人参与
# 初创公司值得加入吗? #
13958次浏览 71人参与
# 元戎现在香不香 #
65290次浏览 532人参与
# 两会劳动法放大招 #
29540次浏览 488人参与
# 双非应该如何逆袭? #
24380次浏览 836人参与
# 我的省钱小妙招 #
5963次浏览 178人参与
# 大学最后一个寒假,我想…… #
23673次浏览 231人参与
# 你投递的公司有几家约面了? #
57874次浏览 418人参与
# 如果中了500万,你会离职吗? #
59689次浏览 442人参与
# 牛友打假中心 #
2185次浏览 114人参与
# 金融银行面经 #
60804次浏览 482人参与
# 网易求职进展汇总 #
72480次浏览 554人参与
# 面试时被问的最奇葩的问题 #
16286次浏览 95人参与
# 网易有道工作体验 #
4979次浏览 19人参与
# bilibili求职进展汇总 #
42801次浏览 444人参与
# 当你面对裁员会如何? #
195923次浏览 1717人参与
# 打工人的精神状态 #
26626次浏览 468人参与
# Tplink求职进展汇总 #
106879次浏览 596人参与