同位字符串连接的最小长度(枚举因子)
https://leetcode.cn/problems/minimum-length-of-anagram-concatenation/description/
给你一个字符串,它由某个字符串和若干的 同位字符串 连接而成。
请你返回字符串的 最小 可能长度。
同位字符串 指的是重新排列一个单词得到的另外一个字符串,原来字符串中的每个字符在新字符串中都恰好只使用一次。
示例 1:
输入:s = "abba"
输出:2
解释:
一个可能的字符串 t 为 "ba" 。
示例 2:
输入:s = "cdef"
输出:4
解释:
一个可能的字符串 t 为 "cdef" ,注意 t 可能等于 s 。
提示:
s 只包含小写英文字母。
中文题意很不清晰,我们重新描述一下题目:给定一个字符串,它是由某个字符串以及它的若干个同位字符串连接而成。问字符串 的最小可能长度。
显然 的长度必须是 的因数。以内因数最多的数是 ,有个因数。因数个数不多,可以考虑直接枚举因数 。
问题变为如何检查字符串 是不是由若干个长度为 的同位字符串连接而成。那么将 分成长度为 的子串,并检查每个子串每种字母出现次数是否相同即可。
class Solution {
public:
int minAnagramLength(string s) {
int n=s.size();
int cnt[26]={0};
for(char c:s) cnt[c-'a']++;
auto check=[&](int len){
for(int i=0;i<n;i+=len){
int tmp[26]={0};
for(int j=0;j<len;j++) tmp[s[i+j]-'a']++;
for(int j=0;j<26;j++) if(tmp[j]*(n/len)!=cnt[j]) return false;
}
return true;
};
// 枚举子串的长度
for (int i = 1; i <= n; i++) if (n % i == 0 && check(i)) return i;
return -1;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2020-06-05 dp不平衡数组
2020-06-05 圆桌问题 (a)