205. Isomorphic Strings

1,题目要求
Given two strings s and t, determine if they are isomorphic.

Two strings 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.
这里写图片描述
判断两个单词是不是同构的——也即两个单词是否能通过直接的字符替代而变成对方的形式。

2,题目思路
一开始,想到用hash,但是涉及到字符与出现数量,又想到了构建一个map。后来感觉这样比较麻烦,有觉得可以构建一个字符出现次序字符串,按顺序统计每一个字符出现的数量,比如egg,出现数量统计就是:12,apple,就是:1211。
但其实这样做是不满足题设条件的。题目的意思是不仅是字符的临近次序要一样,更重要的是字符出现的总次序也要一样才行。
譬如:applpe 和 ellpcr,如果只按照临近顺序来看,它们是满足条件的,但其实他们是不满足的条件的。
只有像applpe 和 ellplcr这样的才是满足的。
因此,题目也是可以直接用hash来做的,因为字符可以隐式地转换成数字的形式。而根据ascii表,最大的字符对应数字为127,因此只需要创建一个长度为为128的向量数组即可。

3,程序源码

class Solution {
public:
    bool isIsomorphic(string s, string t) {
        vector<int> ss(128,-1), tt(128,-1);
        int len = s.size();
        for(int i=0;i<len;i++)
        {
            if(ss[s[i]] != tt[t[i]])
                return false;
            ss[s[i]] = i;
            tt[t[i]] = i;
        }
        return true;
    }
};

猜你喜欢

转载自blog.csdn.net/lym940928/article/details/80318352