关注
#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();
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
秋招投简历提醒助手:一开始还觉得是正常交流。直到一看薪资4-6😨 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你实习是赚钱了还是亏钱了? #
30205次浏览 241人参与
# 2022毕业即失业取暖地 #
116436次浏览 705人参与
# 联影求职进展汇总 #
51234次浏览 325人参与
# 用一句话形容你的团队氛围 #
18412次浏览 178人参与
# CVTE求职进展汇总 #
23008次浏览 319人参与
# 你找工作是从容有余 or 匆忙滚爬? #
11942次浏览 94人参与
# 360集团校招 #
21713次浏览 164人参与
# 哪些公司校招卡第一学历 #
220188次浏览 776人参与
# 牛客租房专区 #
122816次浏览 1347人参与
# 机械人与华为的爱恨情仇 #
137281次浏览 1012人参与
# 海康威视工作体验 #
45591次浏览 157人参与
# 腾讯音乐求职进展汇总 #
136024次浏览 1005人参与
# 嵌入式岗知多少 #
58664次浏览 548人参与
# 联影医疗求职进展汇总 #
6055次浏览 25人参与
# 毕业论文进行时 #
6698次浏览 81人参与
# 同bg的你秋招战况如何? #
174587次浏览 1021人参与
# 找实习你看重大厂光环还是业务方向 #
41474次浏览 164人参与
# 58同城求职进展汇总 #
40144次浏览 263人参与
# 我来点评面试官 #
16499次浏览 114人参与
# 面对逼签的应对技巧 #
7037次浏览 37人参与
# 扒一扒那些奇葩实习经历 #
126689次浏览 1100人参与
