สตริงสองสตริง X และ Y เรียกว่า Isomorphic หากทุกครั้งที่ตัวอักษรใน X ปรากฏ สามารถแทนที่ด้วยอีกตัวอักษรหนึ่งเพื่อให้ได้ Y และในทางกลับกัน เช่น ACAB และ XCXY ตัวอักษรทุกตัวต้องแทนที่ด้วยอีกตัวหนึ่งโดยรักษาลำดับ ไม่มีตัวอักษรสองตัว map ไปตัวเดียวกัน แต่องตัวอักษรอาจ map ไปตัวเองได้
ตัวอย่าง 1
Input: s = "egg", t = "add"
Output: true
ตัวอย่าง 2
Input: s = "foo", t = "bar"
Output: false
Time Complexity: O(N)
Space Complexity: O(N)
โค้ด
public class Arrays
{
public bool IsStringIsomorphic(string s, string t)
{
if (s == null || t == null)
{
return false;
}
int[] chars1 = new int[128];
int[] chars2 = new int[128];
for (int i = 0; i < s.Length; i++)
{
if (chars1[s[i]] != chars2[t[i]])
{
return false;
}
else
{
chars1[s[i]] = i + 1;
chars2[t[i]] = i + 1;
}
}
return true;
}
}
static void Main(string[] args)
{
Arrays s = new Arrays();
Console.WriteLine(s.IsStringIsomorphic("add", "egg"));
}ผลลัพธ์
True