经典算法之Isomorphic Strings

来源:互联网 发布:mac 配置ant 编辑:程序博客网 时间:2024/04/19 12:29

问题描述:

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.

Solutions:


class Solution {
public:
    bool isIsomorphic(string s, string t) {
        if(s.length() != t.length()) {
            return false;
        }
        int *a=new int(s.length);
        for( int i = 0; i < s.length(); i++) {
            for( int j = 0; j<t.length(); j++ ) {
                if( s[i] == s[j] && (t[i]-s[i]) != (t[j]-s[j]) ) {
                    return false;
                }
            }
        }
        return true;
    }
};

上述方法超时。

改进:

class Solution {
public:
void arrset(int *a, int val, int length) {
for(int i=0; i<length; ++i) {
*(a+i)=val;
}
}
    bool isIsomorphic(string s, string t) {
        if(s.length() != t.length()) {
            return false;
        }
        int *a=new int[255];
int *b=new int[255];
int *sub=new int[255];
        arrset(a,0,255);
arrset(b,0,255);
arrset(sub,-1000,255);
        for( int i = 0; i < s.length(); i++) {
            int charA=s[i];
int charB=t[i];
if(a[charA] == 0 && b[charB] == 0) {
a[charA] = 1;
b[charB] = 1;
sub[charA] = s[i] - t[i];
//the case when s is "ab", t is "aa"
}
else {
if(s[i]-t[i] != sub[charA]){
return false;
}
}
        }
        return true;
    }
};

改进by http://blog.csdn.net/brucehb/article/details/45378983

class Solution {
public:
    bool isIsomorphic(string s, string t) {
        int sTotTable[256];
        int tTosTable[256];
        int size = s.length();
        for (int i = 0; i < 256; i++)
        {
            sTotTable[i] = 300;
            tTosTable[i] = 300;
        }


        for (int i = 0; i < size; i++)
        {
            if (sTotTable[s[i]] == 300)
            {
                if (tTosTable[t[i]] == 300)
                {
                    sTotTable[s[i]] = t[i];
                    tTosTable[t[i]] = s[i];
                }
                else
                {
                    return false;
                }

0 0
原创粉丝点击