You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中字符串数组变位词分组实现求助(附is_anagram函数代码)

解决PHP中字符串数组变位词分组的问题

嘿,我懂你这种明明Python里顺顺当当搞定的功能,换PHP就卡壳的感觉!你写的is_anagram函数其实已经抓住了变位词的核心判断逻辑——排序后字符串完全一致就是变位词。接下来咱们把这个逻辑扩展到分组功能上,其实很简单~

先肯定你的现有代码

你的is_anagram函数思路是对的,能准确判断两个字符串是否为变位词:

function is_anagram($pharse1,$pharse2){ 
    $status = false; 
    if($pharse1 && $pharse2){ 
        $pharse1=strtolower(str_replace(" ","", $pharse1)); 
        $pharse2=strtolower(str_replace(" ","", $pharse2)); 
        $pharse1 = str_split($pharse1); 
        $pharse2 = str_split($pharse2); 
        sort($pharse1); 
        sort($pharse2); 
        if($pharse1 === $pharse2){ 
            $status = true; 
        } 
    } 
    return $status; 
}

不过如果用它来做分组,需要两两对比所有字符串,效率会比较低(时间复杂度O(n²))。咱们换个更高效的方式:用排序后的字符串作为分组的唯一键,直接把同组的变位词归类。

完整的变位词分组实现

下面是基于你的判断逻辑优化后的分组函数:

function groupAnagrams($strs) {
    // 存储分组结果的关联数组,键是排序后的特征字符串
    $groups = [];
    
    foreach ($strs as $str) {
        // 预处理字符串:转小写、去除空格
        $cleanStr = strtolower(str_replace(" ", "", $str));
        // 拆分成字符数组排序,再拼接成字符串作为分组标识键
        $charArray = str_split($cleanStr);
        sort($charArray);
        $groupKey = implode('', $charArray);
        
        // 初始化分组或加入现有分组
        if (!isset($groups[$groupKey])) {
            $groups[$groupKey] = [];
        }
        $groups[$groupKey][] = $str;
    }
    
    // 转换为索引数组返回,符合常规分组输出格式
    return array_values($groups);
}

// 测试你的示例数组
$testArray = array('ate', 'map', 'eat', 'pat', 'tea' , 'tap');
print_r(groupAnagrams($testArray));

代码逻辑说明

  1. 生成分组标识:每个字符串清洗后(去空格、转小写),拆分成字符数组排序再拼接——这个字符串就是该变位词组的唯一“身份证”,比如ate、eat排序后都是aet,自然会被分到同一组。
  2. 归类字符串:遍历每个字符串时,根据它的标识键,直接把原字符串加入对应分组数组。
  3. 格式化结果:用array_values把关联数组转成索引数组,输出结构更符合日常使用习惯。

测试结果

运行代码后会得到如下输出,完全符合变位词分组的要求:

Array
(
    [0] => Array
        (
            [0] => ate
            [1] => eat
            [2] => tea
        )

    [1] => Array
        (
            [0] => map
        )

    [2] => Array
        (
            [0] => pat
            [1] => tap
        )
)

内容的提问来源于stack exchange,提问作者kpako1998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:12:53