"Isomorphic Strings" and "Bulls and Cows"

来源:互联网 发布:数控英制螺纹编程实例 编辑:程序博客网 时间:2024/04/29 04:11

这两道题都是关于元素映射关系的,第一次看的时候头好疼,渐渐能把映射关系抽象出来就好了。

Isomorphic Strings:

建立map存储映射关系,如果不符合关系就返回false,需要翻转映射对象再检测一次,总共检测两次。

class Solution {public:    bool isIsomorphic(string s, string t) {        if (s.length() != t.length()) return false;         map<char, char> mp;         for (int i = 0; i < s.length(); ++i) {             if (mp.find(s[i]) == mp.end()) mp[s[i]] = t[i];             else if (mp[s[i]] != t[i]) return false;         }         mp.clear();         for (int i = 0; i < s.length(); ++i) {            if (mp.find(t[i]) == mp.end()) mp[t[i]] = s[i];             else if (mp[t[i]] != s[i]) return false;         }        return true;    }};

Bulls and Cows:

这个映射关系需要检测一次出现次数,实在头疼的不行,搬了一份代码,原理是一样的。

class Solution {public:    string getHint(string secret, string guess) {int bulls = 0;    int cows = 0;    int num[10] = { 0 };    for (int i = 0; i < guess.size(); i++)    {        if (secret[i] == guess[i])        {            bulls = bulls + 1;        }        else {            num[guess[i] - '0']++;        }    }    for (int i = 0; i < secret.size(); i++)    {        if (secret[i] != guess[i] && num[secret[i] - '0'] > 0)        {            cows++;            num[secret[i] - '0']--;        }    }    char buff[20];    sprintf(buff, "%dA%dB", bulls, cows);    return buff;    }};


0 0