Leecode刷题C语言之同位字符串连接的最小长度

执行结果:通过

执行用时和内存消耗如下:

复制代码
bool check(char *s, int m) {
    int n = strlen(s), count0[26] = {0};
    for (int j = 0; j < n; j += m) {
        int count1[26] = {0};
        for (int k = j; k < j + m; k++) {
            count1[s[k] - 'a']++;
        }
        if (j > 0 && memcmp(count0, count1, sizeof(int) * 26) != 0) {
            return false;
        }
        memcpy(count0, count1, sizeof(int) * 26);
    }
    return true;
}

int minAnagramLength(char *s) {
    int n = strlen(s);
    for (int i = 1; i < n; i++) {
        if (n % i != 0) {
            continue;
        }
        if(check(s, i)) {
            return i;
        }
    }
    return n;
}

解题思路:

这段代码的主要目的是找到一个字符串 s 的最小回文子串长度,使得该字符串可以被划分成若干个完全相同的子串,并且这些子串都是彼此的字母异位词(即它们包含相同数量的每个字符)。不过,从代码实现来看,实际上它寻找的是字符串 s 可以被均匀划分成相同字母异位词子串的最小长度。如果找不到这样的划分,则返回整个字符串的长度。下面详细解释这段代码的思路:

check 函数

check 函数用于检查一个字符串 s 是否可以均匀划分成长度为 m 的子串,并且这些子串都是彼此的字母异位词。

  1. 参数
    • char *s:输入的字符串。
    • int m:要检查的子串长度。
  2. 步骤
    • 计算字符串 s 的长度 n
    • 初始化一个数组 count0 用于存储上一个长度为 m 的子串的字符频率。
    • 遍历字符串 s,每次跳跃 m 个字符作为新的子串的开始位置。
    • 对于每个子串,使用另一个数组 count1 来记录当前子串的字符频率。
    • 如果当前子串不是第一个子串(即 j > 0),则比较 count0count1
      • 如果它们不相同,说明不是所有长度为 m 的子串都是彼此的字母异位词,返回 false
    • 使用 memcpycount1 的内容复制到 count0,为下一个子串的比较做准备。
    • 如果所有子串都通过了检查,则返回 true

minAnagramLength 函数

minAnagramLength 函数用于找到字符串 s 可以被均匀划分成相同字母异位词子串的最小长度。

  1. 参数
    • char *s:输入的字符串。
  2. 步骤
    • 计算字符串 s 的长度 n
    • 遍历从 1n-1 的所有可能的子串长度 i
    • 如果 n 不能被 i 整除,则跳过当前长度(因为无法均匀划分)。
    • 使用 check 函数检查长度为 i 的子串是否满足条件(即所有长度为 i 的子串都是彼此的字母异位词)。
    • 如果找到满足条件的子串长度,立即返回该长度。
    • 如果遍历完所有可能的长度都没有找到满足条件的子串,则返回整个字符串的长度 n(作为最坏情况,整个字符串本身就是一个无法再划分的"子串")。

总结

这段代码通过检查字符串 s 是否可以被均匀划分成长度为 m 的子串,并且这些子串都是彼此的字母异位词,来找到最小的这样的 m。如果找不到这样的 m,则返回整个字符串的长度。这可以用于判断字符串是否具有某种特定的均匀性和字符频率特性

相关推荐
NAGNIP7 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队8 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
Fanxt_Ja12 小时前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下12 小时前
最终的信号类
开发语言·c++·算法
茉莉玫瑰花茶12 小时前
算法 --- 字符串
算法
博笙困了13 小时前
AcWing学习——差分
c++·算法
NAGNIP13 小时前
认识 Unsloth 框架:大模型高效微调的利器
算法
NAGNIP13 小时前
大模型微调框架之LLaMA Factory
算法
echoarts13 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Python技术极客13 小时前
一款超好用的 Python 交互式可视化工具,强烈推荐~
算法