December 5, 2023

Viiisit [LeetCode] - 205. Isomorphic Strings

#php#javascript#ruby

keep learning, keep coding!

Problem - Isomorphic Strings

Given two strings s and t, determine if they are isomorphic.

Two strings s and t are isomorphic if the characters in s can be replaced to get t.

All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character, but a character may map to itself.

翻譯蒟蒻

給定兩個字串 st,要判斷是否同構。
也就是說所有字的出現都必須被替換為另一個字,同時保持字的順序,且不能有兩個字映射到同一個字,但一個字可以映射到自己。


Solution - JavaScript

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
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isIsomorphic = function(s, t) {
if (s.length !== t.length) return false;

let map = new Map();

for (let i = 0; i < s.length; i++) {
// 如果 map 中已經有 s[i],檢查值是否等於 t[i]
if (map.has(s[i])) {
if (map.get(s[i]) !== t[i]) {
// 如果不等於,則返回 false
return false;
}
} else {
// 如果 map 中沒有 s[i],檢查 t[i] 是否已經有對應到字
for (let value of map.values()) {
if (value === t[i]) {
// 如果已經有對應的字,則返回 false
return false;
}
}
// 如果 t[i] 沒有對應的字,則添加 s[i] 和 t[i] 到 map 中
map.set(s[i], t[i]);
}
}
// 如果所有的字都檢查過,並且沒有返回 false,則返回 true
return true;
};

Solution - Ruby

1
2
3
4
5
6
7
8
9
10
11
12
13
def is_isomorphic(s, t)
return false if s.length != t.length
map = {}
s.chars.each_with_index do |c, i|
if map[c]
return false if map[c] != t[i]
else
return false if map.values.include?(t[i])
map[c] = t[i]
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
function isIsomorphic($s, $t) {
$sLen = strlen($s);
$tLen = strlen($t);
if ($sLen != $tLen) {
return false;
}
$sMap = [];
$tMap = [];
for ($i = 0; $i < $sLen; $i++) {
if (isset($sMap[$s[$i]]) && $sMap[$s[$i]] != $t[$i]) {
return false;
}
if (isset($tMap[$t[$i]]) && $tMap[$t[$i]] != $s[$i]) {
return false;
}
$sMap[$s[$i]] = $t[$i];
$tMap[$t[$i]] = $s[$i];
}
return true;
}

PHP 方法筆記

LeetCode 傳送門 - Isomorphic Strings