码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] Isomorphic Strings

时间:2015-04-29 15:10:38      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:leetcode

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:12ms
class 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;
}

[LeetCode] Isomorphic Strings

标签:leetcode

原文地址:http://blog.csdn.net/foreverling/article/details/45365715

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!