唯一摩尔斯密码词/uniqueMorseRepresentations.php
<?php
/*
国际摩尔斯密码定义一种标准编码方式，将每个字母对应于一个由一系列点和短线组成的字符串， 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。
为了方便，所有26个英文字母对应摩尔斯密码表如下：
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
给定一个单词列表，每个单词可以写成每个字母对应摩尔斯密码的组合。例如，"cab" 可以写成 "-.-..--..."，(即 "-.-." + "-..." + ".-"字符串的结合)。我们将这样一个连接过程称作单词翻译。
返回我们可以获得所有词不同单词翻译的数量。
例如:
输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释:
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."

共有 2 种不同翻译, "--...-." 和 "--...--.".
 */
// 解题思路，把每个单词分割为数组的单个字母
// ，然后每个字母减去97 （这里用到了  ascii 码的基础知识。 A-Z 是 65 - 90 。小写 a-z 是97-122，
//  每个字母减97 的意思是 在定义好的 摩斯密码数组中，从零下表开始计数的 进行匹配
//  就等于对应的摩尔斯码数组下标
function uniqueMorseRepresentations($words)
{
    $mossArray = [".-",
        "-...",
        "-.-.",
        "-..",
        ".",
        "..-.",
        "--.",
        "....", "..", ".---", "-.-",
        ".-..", "--", "-.", "---", ".--.",
        "--.-", ".-.", "...", "-", "..-",
        "...-", ".--", "-..-", "-.--", "--.."];
    $new = [];
    foreach ($words as $key => $value) {
        // foreach (str_split($value) as $v) {
        //     $str .= $mossArray[ord($v) - 97];
        // }
        $str = '';
        for ($i = 0; $i < strlen($value); $i++) {
            $str .= $mossArray[ord($value[$i]) - 97];
        }
        $new[$key] = $str;

    }
    return count(array_unique($new));
}

$strArr = ["gin", "zen", "gig", "msg"];

print_r(uniqueMorseRepresentations($strArr));
die;
