No.205 Ismorphic Strings

No.205 Ismorphic 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,
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大小相同,s中的字符经过相同的映射可转换为t,则s和t是同构的
  注:两个字符不能映射到同一字符,但字符可映射到它本身

 1 #include "stdafx.h"
 2 #include <map>
 3 #include <vector>
 4 #include <iostream>
 5 using namespace std;
 6 
 7 class Solution
 8 {
 9 public:
10     bool isIsomorphic(string s, string t)
11     {//字符串同构判断
12      //已知s和t大小相同,s中的字符经过相同的映射可转换为t,则s和t是同构的
13      //注:两个字符不能映射到同一字符,但字符可映射到它本身
14      int size = s.size();
15      if(size <= 1)
16          return true;//大小为1,肯定同构
17      map<char,char> mapping;
18      for(int i=0; i<size; i++)
19      {
20          if(mapping.find(s[i]) == mapping.end())//尚未建立映射
21          {
22              for(auto const &it : mapping)
23                 if(it.second == t[i])//两个字符映射到同一字符了!!
24                     return false;
25              mapping[s[i]] = t[i];
26          }
27          else
28              if(t[i] != mapping[s[i]])
29                  return false;
30          
31      }
32      return true;
33     }
34 };
35 
36 int main()
37 {
38     Solution sol;
39     cout << boolalpha;
40 
41     cout << sol.isIsomorphic("egg","add")<<endl;//true
42     cout << sol.isIsomorphic("foo","bar")<<endl;//false
43     cout << sol.isIsomorphic("paper","title")<<endl;//true
44     cout << sol.isIsomorphic("abcda","bcceb")<<endl;//两个字符映射相同
45 }

 

 

posted @ 2015-06-10 16:06  人生不酱油  阅读(139)  评论(0编辑  收藏  举报