关注
#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();
查看原帖
点赞 评论
相关推荐
03-17 09:09
河北师范大学 安卓 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 春招/暑实第一面是哪家? #
28939次浏览 307人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
6102次浏览 31人参与
# MiniMax求职进展汇总 #
20965次浏览 273人参与
# 腾讯音乐求职进展汇总 #
159846次浏览 1100人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
185572次浏览 1102人参与
# 小红书求职进展汇总 #
226183次浏览 1351人参与
# 巨人网络春招 #
10868次浏览 164人参与
# 硬件人秋招的第一个offer #
122247次浏览 1453人参与
# 实习到现在,你最困惑的一个问题 #
31119次浏览 271人参与
# 如果重来一次你还会读研吗 #
228916次浏览 2009人参与
# 网易游戏笔试 #
6032次浏览 83人参与
# 职能管理面试记录 #
10351次浏览 57人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
5958次浏览 150人参与
# 正在春招的你,也参与了去年秋招吗? #
361596次浏览 2628人参与
# 硬件应届生薪资是否普遍偏低? #
108114次浏览 601人参与
# 简历中的项目经历要怎么写? #
308283次浏览 4088人参与
# 工作中遇到的歹人 #
96246次浏览 535人参与
# 我的AI电子员工 #
34053次浏览 223人参与
# 校招笔试 #
460746次浏览 2941人参与
# AI时代,哪些岗位最容易被淘汰 #
60656次浏览 637人参与
# 你怎么看待AI面试 #
178309次浏览 1076人参与
# 如何一边实习一边找下家? #
39741次浏览 345人参与

查看13道真题和解析