LeetCode (35) Isomorphic Strings

题目描述

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.

For example,

Note: You may assume both s and t have the same length.

本题比较简单,不必考虑两个字符串长度不同的情况。遍历字符串,使用map得到两个字符串中字符的映射,,若新出现的字符对与map中保存的不同,则返回false。

需要注意,使用一个map对于 “ab”, “aa” 的情况可能无法判断,因为从a->a 和 b->a的key是不一样的,在map中无法查找到,而反过来则是 a->a 和 a->b显然是错误的,因此,我们可以对两个字符串分别作为map的key,进行两次判断,避免错误的发生。

另一种做法是,仅使用一个字符串作为map的key,但是使用一个set保存每个key的value。若处理完成后,set中元素个数小于map元素个数,则说明存在两个不同的key映射到了同一个value情况,返回false.

代码class Solution {public:bool isIsomorphic(string s, string t) {if(s.size() != t.size())return false;unordered_map<char, char> stringMap;for(size_t i = 0; i != s.size(); ++i){char sc = s[i];char tc = t[i];if (stringMap.find(sc) == stringMap.end()){stringMap[sc] = tc;}else{if (stringMap[sc] != tc)return false;}}unordered_set<char> stringSet;unordered_map<char, char>::iterator it = stringMap.begin();for(; it != stringMap.end(); ++it){if (stringSet.find(it->second) != stringSet.end())return false;elsestringSet.insert(it->second);}return true;}};

天下爱情,大抵如斯。

LeetCode (35) Isomorphic Strings

相关文章:

你感兴趣的文章:

标签云: