美文网首页
有效的字⺟异位词

有效的字⺟异位词

作者: 吕艳凯 | 来源:发表于2019-11-28 18:09 被阅读0次
    有效的字⺟异位词(LeetCode 242题)

    思路1 :
    前提是只包含小写字母,小写字母只有26个,那么我们可以使用两个int数组(长度固定为26)来记录字母出现的次数,然后遍历比较个数是否相等即可

     class Code{
    
        function isZmyw($s,$t){
            if(!$s&&!$s){
                return true;
            }
    
            $arrS = str_split($s);
            $arrT = str_split($t);
            //获取字母出现次数数组
            $arrSzCount = array();
            foreach ($arrS as $key => $value) {
                if(isset($arrSzCount[$value])){
                    $arrSzCount[$value]++;
                }else{
                    $arrSzCount[$value] = 1;
                }
            }
            //获取字母出现次数数组
            $arrTzCount = array();
            foreach ($arrT as $key => $value) {
                if(isset($arrTzCount[$value])){
                    $arrTzCount[$value]++;
                }else{
                    $arrTzCount[$value] = 1;
                }
            }
    
            var_dump($arrSzCount);
            var_dump($arrTzCount);
    
            //判断字母是否相同以及出现次数是否相同
            foreach ($arrSzCount as $key => $value) {
                if(!isset($arrTzCount[$key])||$arrTzCount[$key] != $value){
                    return false;
                }
            }
            //判断字母是否相同以及出现次数是否相同
            foreach ($arrTzCount as $key => $value) {
                if(!isset($arrSzCount[$key])||$arrSzCount[$key] != $value){
                    return false;
                }
            }
    
            return true;
        }
    }
    $obj = new Code();
    $res = $obj->isZmyw('array','rraya');
    var_dump($res);
    

    执行结果如下:

    执行结果

    思路2 :
    使用一个int数组(长度为26),s字符串中出现此字符+1,t出现此字符-1,如果最终遍历数组的值均为0即t是s的字母异位词

    class Code{
    
        function isZmyw($s,$t){
            //获取26个字母组成以字母为键,值为0的数组
            $strZm = 'abcdefjhijklmnopqrstuvwxyz';
            $arrResZm = str_split($strZm);
            $arrZm = array();
            foreach ($arrResZm as $key => $value) {
                $arrZm[$value] = 0;
            }
    
            $arrS = str_split($s);
            $arrT = str_split($t);
            //若s字符串存在的字母,字母数组对应键值+1
            foreach ($arrS as $key => $value) {
                $arrZm[$value]++;
            }
            //若t字符串存在的字母,字母数组对应键值-1
            foreach ($arrT as $key => $value) {
                $arrZm[$value]--;
            }
            //最后字母数组所有键值若存在!=0 的情况,则表示s和t字符串字母种类和个数不同
            foreach ($arrZm as $key => $value) {
                if($value != 0){
                    return false;
                }
            }
    
            return true;
    
        }
    
    }
    $obj = new Code();
    $res = $obj->isZmyw('array','rraya');
    var_dump($res);
    

    执行结果:

    结果

    总结
    思路1稍微有一点麻烦,但是算法思路比较通用
    思路2比较简单,但是有一定局限性,假如字母的个数不是有限的怎么办?

    相关文章

      网友评论

          本文标题:有效的字⺟异位词

          本文链接:https://www.haomeiwen.com/subject/zdtiwctx.html