关注
#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();
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 大厂面试初体验 #
5397次浏览 42人参与
# 如果可以,你希望哪个公司来捞你 #
100882次浏览 457人参与
# 如何提高实习转正率? #
2285次浏览 30人参与
# leader认为你工作不认真怎么办 #
30877次浏览 140人参与
# 你遇到过哪些神仙同事 #
100342次浏览 724人参与
# 我的国央企投递进展 #
46666次浏览 292人参与
# 国企是理工四大天坑的最好选择吗 #
13702次浏览 95人参与
# 五一之后,实习真的很难找吗? #
78525次浏览 515人参与
# 机械人,你被简历秒挂的企业有哪些? #
43011次浏览 281人参与
# 招聘要求与实际实习内容不符怎么办 #
113007次浏览 770人参与
# 如果公司给你放一天假,你会怎么度过? #
17120次浏览 128人参与
# 找工作时的取与舍 #
80467次浏览 568人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
246327次浏览 1792人参与
# 三一重工求职进展汇总 #
15079次浏览 67人参与
# OPPO求职进展汇总 #
662912次浏览 5041人参与
# 你的秋招第一场笔试是哪家 #
142809次浏览 1453人参与
# 总结:哪家公司面试体验感最差 #
61098次浏览 276人参与
# 如果重来一次你还会读研吗 #
176925次浏览 1786人参与
# 机械人,说说你的烦心事 #
69714次浏览 839人参与
# 面试时被问的最奇葩的问题 #
22996次浏览 130人参与