Hai chuỗi X và Y gọi là đồng cấu nếu tất cả lần xuất hiện của mỗi ký tự trong X có thể thay bằng ký tự khác để được Y và ngược lại. Thứ tự ký tự phải giữ nguyên. Không hai ký tự nào ánh xạ tới cùng một ký tự, nhưng ký tự có thể ánh xạ tới chính nó.
Ví dụ 1
Input: s = "egg", t = "add"
Output: true
Ví dụ 2
Input: s = "foo", t = "bar"
Output: false
Độ phức tạp thời gian: O(N)
Độ phức tạp không gian: O(N)
Code
public class Arrays
{
public bool IsStringIsomorphic(string s, string t)
{
if (s == null || t == null || s.Length != t.Length)
{
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")); // Output: True
}
Kết quả đầu ra
True
Lưu ý: Đã bổ sung kiểm tra s.Length != t.Length để tránh lỗi logic.