[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", return true.
Given "foo", "bar", return false.
Given "paper", "title", return true.
Note:
You may assume both s and t have the same length.
解題思路
建立兩個表:
①從字串s到字串t的字元對應表,因為最大的字母為122,因此映射表的大小為123。映射表索引值為s中的字元,value為t中對應位置的字元。
②isUsed表代表t中的該字元是否已經被作為s中某字元的value值。
實現代碼
#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;}