1. 程式人生 > >Leetcode:205.同構字串

Leetcode:205.同構字串

給定兩個字串 和 t,判斷它們是否是同構的。

如果 中的字元可以被替換得到 ,那麼這兩個字串是同構的。

所有出現的字元都必須用另一個字元替換,同時保留字元的順序。兩個字元不能對映到同一個字元上,但字元可以對映自己本身。

示例 1:

輸入: s = "egg", t = "add"

輸出: true

示例 2:

輸入: s = "foo", t = "bar"

輸出: false

示例 3:

輸入: s = "paper", t = "title"

輸出: true

說明:
你可以假設 和 具有相同的長度。

解題思路:

同構字串。同構字串的數學描述:從左往右遍歷字串,對於任意相同位置

的兩個字元s[pos],t[pos],除非這兩個字元都是第一次出現之外,s[pos_s]是最近的一個s[pos],s[pos_t]是最近的一個t[pos],滿足pos_s=pos_t。

C++程式碼
class Solution {
public:
    bool isIsomorphic(string s, string t) {
        int m1[256] = {0}, m2[256] = {0}, n = s.size();
        for (int i = 0; i < n; ++i) {
            if (m1[s[i]] != m2[t[i]]) return false;
            m1[s[i]] = i + 1;
            m2[t[i]] = i + 1;
        }
        return true;
    }
};