关注
#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();
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
10-30 18:20
第一拖拉机制造厂拖拉机学院 C++
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# uu们,春招你还来吗? #
13786次浏览 91人参与
# 硬件兄弟们 甩出你的华为奖状 #
117292次浏览 699人参与
# 百融云创求职进展汇总 #
260次浏览 0人参与
# 哪一瞬间让你觉得“这班不如不上” #
12722次浏览 161人参与
# 面试紧张时你会有什么表现? #
16034次浏览 131人参与
# 工作前VS工作后,你的心态变化 #
14512次浏览 164人参与
# Offer比较,你最看重什么? #
240814次浏览 1483人参与
# 2025年终总结 #
14272次浏览 224人参与
# 第一份工作能做外包吗? #
87055次浏览 583人参与
# 为了去实习,我赌上了___ #
22675次浏览 208人参与
# 总结:哪家公司最喜欢泡池子 #
155677次浏览 560人参与
# 应届生初入职场,求建议 #
279059次浏览 2839人参与
# 父母对你找工作是助力还是阻力? #
14375次浏览 207人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
12858次浏览 140人参与
# 互联网公司评价 #
459262次浏览 4041人参与
# 一人推荐一个值得做的项目 #
10323次浏览 147人参与
# 十二月请对我好一点 #
26406次浏览 356人参与
# 和牛牛一起刷真题 #
118699次浏览 2085人参与
# 学历or实习经历,哪个更重要 #
202892次浏览 1076人参与
# 毕业论文进行时 #
16997次浏览 112人参与
# 25届网易互娱暑实进度 #
91917次浏览 750人参与
查看2道真题和解析