[LeetCode] Isomorphic Strings, leetcodeisomorphic
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,
Given"egg"
,"add"
, Returntrue
.
Given"foo"
,"bar"
, Returnfalse
.
Given"paper"
,"title"
, Returntrue
.
Note:
You may assume both s and t have the same length.
Solutions
Create two tables:
① Character ing table from string s to string t. Because the maximum letter is 122, the size of the ing table is 123. In the ing table, the key value is a character in s and the value is a character at the corresponding position in t.
② The isUsed table indicates whether the character t has been used as the value of a character in s.
Implementation Code
#include <iostream>using namespace std;//Runtime:12msclass Solution {public: bool isIsomorphic(string s, string t) { int len = s.size(); unsigned char map[123] = {0}; bool isUsed[123] = {0}; for (int i = 0; i < s.size(); i++) { if (map[s[i]] == 0) { if (!isUsed[t[i]]) { map[s[i]] = t[i]; isUsed[t[i]] = true; } else { return false; } } else if (map[s[i]] != t[i]) { return false; } } return true; }};int main(){ Solution s; cout<<s.isIsomorphic("aba", "baa")<<endl; cout<<s.isIsomorphic("egg", "add")<<endl; cout<<s.isIsomorphic("foo", "bar")<<endl; cout<<s.isIsomorphic("paper", "title")<<endl;}