1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| 思路: 将规律pattern根据每个字符分成数组,将s根据每个空格分成数组 先判断两个数组长度是否相同,不同返回false 创建一个新的数组map 遍历pattern数组,判断是否在map中已经存在了相同的下标,如果存在,判断,下标对应的值是否和s数组的值相同,不同返回false 如果不存在,判断s数组的值是否已经存在map中,如果存在,证明s值对应到了另一个pattern值上,返回false 每次遍历记录到map中
代码: /** * @param String $pattern * @param String $s * * @return Boolean */ function wordPattern($pattern, $s) { // 字符串转数组 $map1 = str_split($pattern); $map2 = explode(' ', $s);
// 长度不一致,返回false if (count($map1) != count($map2)) { return false; }
$map = []; foreach ($map1 as $k => $value) { // 如果存在key if (isset($map[$value])) { // 如果key对应的值与map2中的值不同,返回false if ($map[$value] != $map2[$k]) { return false; } } else { // 如果不存在key,但map2中值却已经存在数组中,证明map2中的值被其他key对应,返回false if (in_array($map2[$k], $map)) { return false; } }
$map[$value] = $map2[$k]; }
return true; }
|