当前位置: 首页 > news >正文

通配*|滚动hash

lc2489

lc1983

差值前缀和+枚举右维护左

class Solution {
public:
int widestPairOfIndices(vector<int>& nums1, vector<int>& nums2)
{
int n=nums2.size();
vector<int> d(n+1);
unordered_map<int,int> hash;
hash[0]=0;//init
int ret=0;
for(int i=1;i<=n;i++)
{
d[i]=d[i-1]+nums1[i-1]-nums2[i-1];
if(hash.count(d[i]))
ret=max(ret,i-hash[d[i]]);
else
hash[d[i]]=i;
}
return ret;
}
};

lc3606

先按下标排序,在转换为字符串

class Solution {
public:
vector<string> validateCoupons(vector<string>& code, vector<string>& businessLine, vector<bool>& isActive)
{
int n=code.size();
vector<int> ret;
set<string> set={"electronics","grocery","pharmacy","restaurant"};
unordered_map<string,int> hash;
unordered_map<int,string> hash2;

for(int i=0;i<n;i++)
{
if(isActive[i]==true)
{
if(set.count(businessLine[i]))
{
bool check=true;
string tmp=code[i];
for(int j=0;j<code[i].size();j++)
{
if(isalnum(tmp[j]) || tmp[j]=='_')
check=true;
else
{
check=false;
break;
}
}
if(check && !tmp.empty())
{
ret.push_back(i);
}
}
}
}


sort(ret.begin(),ret.end(),[&](int& a,int& b)
{
string b1=businessLine[a],b2=businessLine[b];
if(b1!=b2)
{
return b1<b2;
}
return code[a]<code[b];
});
//先按下标排序,在转换为字符串
vector<string> ans;
for(auto& r:ret)
ans.push_back(code[r]);

return ans;

}
};

lc1554

滚动hash优化

unordered_map<int, vector<int>> hs;

hash给每个字符串“遮掉一位”做标记

遇到重复标记时,真实验证这俩串是不是只遮掉的那一位不同,是就返回true

class Solution {
public:
bool differByOne(vector<string>& dict) {
// self-defined hash, mod 5801, any big prime fine
// strict, check if there is hash clashing

int mod(5801), m(dict[0].length()), mod_pows[m];
mod_pows[0] = 1;
for (int i = 1; i < m; ++i)
mod_pows[i] = mod_pows[i - 1] * 27 % mod;

unordered_map<int, vector<int>> hs; // we can also use deque<int> here

for (int k = 0; k < dict.size(); ++k) {
int h = 0;
for (char& c: dict[k])
h = (27 * h + c - 'a' + 1) % mod;
for (int i = 0; i < m; ++i) {
int t = (h - mod_pows[m - i - 1] * (dict[k][i] - 'a' + 1) % mod + mod) % mod;
if (hs.count(t)) {
for (const int& x: hs[t]) {
int kk(x / m), ii(x % m);
if (ii == i) {
bool checked = true;
for (int p = 0; p < m; ++p) {
if (p == i) continue;
if (dict[k][p] != dict[kk][p]) {
checked = false;
break;
}
}
if (checked) return true;
}
}
}
hs[t].push_back(m * k + i);
}
}

return false;
}
};

mle 通配* hash

class Solution {

public:

bool differByOne(vector<string>& dict) {

if (dict.empty()) return false;

int len = dict[0].size();

unordered_set<string> seen;

for (auto& s : dict) {

// 通配* hash

for (int i = 0; i < len; ++i) {

string key = s;

key[i] = '*'; // 把第i位替换为通配符,代表忽略该位的差异

if (seen.count(key)) {

return true;

}

seen.insert(key);

}

}

return false;

}

};

http://www.rkmt.cn/news/92285.html

相关文章:

  • 2025代码大模型新范式:Qwen3-Coder重构企业开发效率
  • Burp Intruder模块实现暴力破解
  • 免费获取完整杭州GIS数据:ArcGIS底图资源详解
  • 20 . 多数元素
  • 2025年pvc蝶阀,电动蝶阀,气动蝶阀厂家最新推荐,控制稳定性与安装便捷性参考攻略! - 品牌鉴赏师
  • 第四周算法清单
  • 车载 SerDes 学习指南:原理、芯片、选型与工程实践
  • AI如何快速生成50000个有效电子邮件地址
  • 62、Python Web开发:CGI、Cookie及其他服务端方法详解
  • Wan2.1-I2V终极指南:简单三步开启AI图生视频新纪元
  • 如何快速掌握GeoTools:构建专业GIS应用的完整指南
  • 28、Red Hat Linux 9:软件管理、系统配置与网络安全指南
  • 如何用AI自动生成Moment.js日期处理代码
  • ComfyUI商业案例:电商产品图生成实战
  • 18、Linux 网络搭建与服务配置指南
  • FastAPI 性能优化实战:7大核心技巧深度解析
  • nnUNet如何用AI加速医学影像分割开发
  • 2025年12月污泥压滤机,带式压滤机,气化渣脱水专用压滤机厂家权威推荐,脱水率深度解析! - 品牌鉴赏师
  • 零基础教程:5分钟搞定Docker+Nginx
  • 2025年评价高的喷涂缠绕保温管道厂家最新热销排行 - 品牌宣传支持者
  • 2025年本地地毯清洗服务口碑排行,前十名清洗效果实测!海淀靠谱的地毯清洗推荐聚焦技术实力与行业适配性 - 品牌推荐师
  • 2025年口碑好的304不锈钢防爆配电箱/移动式防爆配电箱厂家推荐及选择指南 - 品牌宣传支持者
  • 快速验证:自制IE11离线包生成器原型
  • 2025年如何挑选本地评价好的铝丝打卡机厂家,国内打卡机电话优质品牌榜单更新 - 品牌推荐师
  • 如何甄别空气能热泵厂家的真实力?2025年年终最新行业趋势解读及5家值得信赖的厂家推荐! - 十大品牌推荐
  • 17、D-Bus与systemd:Linux系统核心服务深度解析
  • 2025年12月生活污水超干脱水压滤机,隔膜压滤机,板框压滤机厂家推荐,环保达标设备红榜! - 品牌鉴赏师
  • 1、实用数字取证成像:Linux 工具的力量
  • 开源图形编程文档平台的终极技术革新与社区协作模式深度解析
  • 终极Python视频处理指南:告别复杂命令的ffmpeg-python实战