December 8, 2023

Viiisit [LeetCode] - 290. Word Pattern

#php#javascript#ruby

keep learning, keep coding!

Problem - Word Pattern

Given a pattern and a string s, find if s follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.

翻譯蒟蒻

給定一個模式和一個字串 s,要找出是否遵循相同的模式。
模式中的每個字母對應到 s 中的一個非空單詞,
而且這個映射是不同的模式字母對應到不同的單詞,同一個單詞不能對應到不同的模式字母。


Solution - JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @param {string} pattern
* @param {string} s
* @return {boolean}
*/
var wordPattern = function(pattern, s) {
let words = s.split(' ');
let wordsMap = new Map();
let patternMap = new Map();

if (pattern.length !== words.length) return false;

for (let i = 0; i < pattern.length; i++) {
if (wordsMap.has(words[i]) && wordsMap.get(words[i]) !== pattern[i]) return false;
if (patternMap.has(pattern[i]) && patternMap.get(pattern[i]) !== words[i]) return false;
wordsMap.set(words[i], pattern[i]);
patternMap.set(pattern[i], words[i]);
}

return true;
};

Solution - Ruby

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def word_pattern(pattern, s)
words = s.split(" ")
hash = {}

return false if words.length != pattern.length

pattern.chars.each_with_index do |char, index|
if hash[char]
return false if hash[char] != words[index]
else
return false if hash.values.include?(words[index])
hash[char] = words[index]
end
end

true
end

Solution - PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function wordPattern($pattern, $s) {
$s = explode(' ', $s);
$pattern = str_split($pattern);
$map = [];
$patternMap = [];

if(count($pattern) != count($s)) return false;

for($i = 0; $i < count($pattern); $i++){
if(!isset($map[$pattern[$i]])){
$map[$pattern[$i]] = $s[$i];
}else{
if($map[$pattern[$i]] != $s[$i]) return false;
}
if(!isset($patternMap[$s[$i]])){
$patternMap[$s[$i]] = $pattern[$i];
}else{
if($patternMap[$s[$i]] != $pattern[$i]) return false;
}
}

return true;
}

PHP 方法筆記


- `str_split` 函數是 PHP 中將字串轉換為字元陣列。

函數的基本語法如下:
1
2
3
4
array str_split ( string $string [, int $split_length = 1 ] )

// `$string`: 要轉換的原始字串。
// `$split_length`(optional): 指定每個元素的最大長度。預設為 1,即將字串拆分為單一字元的陣列。
- return 值: - 將指定的 $string 字串按照指定的 $split_length 長度進行拆分,返回一個包含拆分後的字元的陣列。
1
2
3
4
  $string = "Hello";
$characters = str_split($string);

// $characters 現在是一個陣列,包含 ["H", "e", "l", "l", "o"]

LeetCode 傳送門 - Word Pattern