PHP版 判断两个字符串为互换词语

指定两个字符串,通过程序的判断两个字符串是否互为变型词。

    $str = 'abcd';
    $compare_str = 'cdab';
    compare_func($str,$compare_str); //此时返回true
    //或
    $str = '123a';
    $str = '123';
    compare_func($str,$compare_str); //此时返回false

解题思路:

  • 如果两个字串是互为变型词,那么字串长度是一致的。

  • 遍历第一个字串的每个字符获取其Ascii做下标,统计出现次数,存入Ascii数组。再遍历第二个字串中每个字符的Ascii做下标,直接从Ascii数组中减去出现次数即可。

function compare_func($str,$compare_str)
{
    $strl = strlen($str);
    $compare_strl = strlen($compare_str);
    // 若两个字串的长度等于零或不一致返回false
    if ($strl + $compare_strl === 0 || $strl !== $compare_strl)
        return false;
    // 存储出现过的字符
    $ascii = [];
    for ($i = 0;$i < $strl;$i++) {
        // 以每个字符的Ascii码作为下标
        $ascii[ord($str[$i])] ++;
    }
    for ($i = 0;$i < $strl;$i++) {
        // 这里如果已经等于零了,再自减必然为负数,那么直接返回false
        if ( $ascii[ord($compare_str[$i])] -- == 0 ){
            return false;
        }
    }
    return true;
}

本文参考 “程序员代码面试指南-左程云” 一书改写和分享

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013815844/article/details/49945647
文章标签: php 变型词
个人分类: 算法与数据结构
上一篇Yii2使用Redis - 从安装redis到使用
下一篇Coreseek 编译报错 “ExprEval” was not declared 解决方法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭