24/12/20随笔:记录一下每日力扣看到的modern c++
1.24/12/20随笔:记录一下每日力扣看到的modern c++
2.2025/01/12 力扣每日一题3138. 同位字符串连接的最小长度
给你一个字符串 s
,它由某个字符串 t
和若干 t
的 同位字符串 连接而成。
请你返回字符串 t
的 最小 可能长度。
同位字符串 指的是重新排列一个单词得到的另外一个字符串,原来字符串中的每个字符在新字符串中都恰好只使用一次。
示例 1:
输入:s = "abba"
输出:2
解释:
一个可能的字符串
t
为"ba"
。
示例 2:
输入:s = "cdef"
输出:4
解释:
一个可能的字符串
t
为"cdef"
,注意t
可能等于s
。
提示:
1 <= s.length <= 105
s
只包含小写英文字母。
我的解法:
class Solution {
public:
string cut1, cut2, gs;
int len;
bool check(int i){
int now[26] = {0}, cnt[26] = {0};
for(char& ch : cut1){
now[ch - 'a']++;
}
for(int j = i; j < len; j += i){
memset(cnt, 0, sizeof(cnt));
cut2 = gs.substr(j, i);
for(char& ch : cut2){
cnt[ch - 'a']++;
}
for(int k = 0; k < 26; k++){
if(now[k] != cnt[k]) return 0;
}
}
return 1;
}
int minAnagramLength(string s) {
len = s.size();
gs = s;
vector<int> g;
for(int i = 1; i * i <= len; i++){
if(len % i != 0) continue;
if(i * i == len) g.push_back(i);
else{
g.push_back(i);
g.push_back(len / i);
}
}
sort(g.begin(), g.end());
for(auto& i : g){
cut1 = gs.substr(0, i);
if(check(i)) return i;
else continue;
}
return len;
}
};
官方题解
class Solution {
public:
int minAnagramLength(string s) {
int n = s.size();
auto check = [&](int m) -> bool {
vector<int> count0(26);
for (int j = 0; j < n; j += m) {
vector<int> count1(26);
for (int k = j; k < j + m; k++) {
count1[s[k] - 'a']++;
}
if (j > 0 && count0 != count1) {
return false;
}
count0.swap(count1);
}
return true;
};
for (int i = 1; i < n; i++) {
if (n % i != 0) {
continue;
}
if (check(i)) {
return i;
}
}
return n;
}
};
大佬的modern c++
#include <ranges>
class Solution {
public:
int minAnagramLength(string s) {
int sz = s.size(), cnt[26]{};
for (char c : s) {
cnt[c - 'a']++;
}
int n = accumulate(cnt, cnt + 26, 0, (int(*)(int, int))gcd);
auto f = [](auto&& r) {
array<int, 26> a{};
for (auto c : r) {
a[c - 'a']++;
}
return a;
};
for (auto i : views::iota(sz / n, sz / 2 + 1)
| views::filter([&](auto i) { return !(sz % i) && !(n % (sz / i)); })) {
auto a = f(s | views::take(i));
if (ranges::all_of(s | views::chunk(i) | views::drop(1), [&](auto&& r) { return f(r) == a; }))
return i;
}
return s.size();
}
};
好多没见过的,后面慢慢学,这次记录下来,,,,
合集:
算法学习
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性