Leetcode基础刷题之PHP解析(290. Word Pattern)
2019-4-22 星期一 开始吧
上一题链接 Leetcode基础刷题之PHP解析(283. Move Zeroes)
题目描述
给你两个字符串,判断他们是否遵循相同的模式。这就意味着你需要对字符串进行映射。
题目分析
我这里的思路是,把第二次字符串分割成数组,每次从第一个字符串中截取一位进行映射,存入到自定义的数组中,首先判断的是如果字符串的长度和分割字符串的数组个数不相等,直接false,判断这个当前键是否存在数组中了,如果不存在还需要进一步判断当前的值是否等于已存在的键对应的值了,如果等于,说明当前值已经赋值给另外的键,直接false,如果当前键已经存在数组中,只需要判断当前值是否等于键中对应的值即可。
/**
* @param String $pattern
* @param String $str
* @return Boolean
*/
function wordPattern($pattern, $str) {
$data=[];
$strArray=explode(' ',$str);
if(strlen($pattern) !==count($strArray)){
return false;
}
for($i=0;$i<count($strArray);$i++){
$current=substr($pattern,$i,1);
if(!array_key_exists($current,$data)) {
foreach($data as $key=>$val){
if($data[$key] ==$strArray[$i]) {
return false;
}
}
$data[$current]=$strArray[$i];
}else {
if($data[$current] !==$strArray[$i]){
return false;
}
}
}
return true;
}
1 Comment
function wordPattern ($pattern, $str) { $strArr = explode(' ', $str); if (strlen($pattern) != count($strArr)) { return false; } $chars = []; for ($i=0; $i < strlen($pattern); $i++) { $chars[$pattern[$i]] = $strArr[$i]; } foreach ($strArr as $key => $item) { if ($item != $chars[$pattern[$key]]) { return false; } } return true; }