youzouzou / leetcode

算法练习

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

205.同构字符串

youzouzou opened this issue · comments

题号205:

给定两个字符串 s 和 t,判断它们是否是同构的。

如果 s 中的字符可以被替换最终变成 t ,则两个字符串是同构的。

所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

例如,

给定 "egg", "add", 返回 true.

给定 "foo", "bar", 返回 false.

给定 "paper", "title", 返回 true.

注意:

你可以假设 s 和 t 具有相同的长度。

解题思路:

类似桶排序的思路,以第一个字符串的字符作为桶的序号,对应映射到第二个字符串的字符(映射值);

遍历字符串时,若遇到已初始化的字符,则比较映射值是否与第二个字符串的字符相等,不等则返回false;

若未初始化,则将第二个字符串的字符作为映射值赋给该桶;

最后还需要比较桶中的映射值是否有重复,若有重复也返回false。

代码实现:

class Solution {

public:

    bool isIsomorphic(string s, string t) {

        char a[128]={};

        for(int i=0;i<s.length();i++){

            if(a[s[i]] && a[s[i]]!=t[i])

                return false;

            a[s[i]]=t[i];

        }

        for(int i=0;i<128;i++){

            for(int j=i+1;j<128;j++){

                if(a[i] && a[j] && a[i]==a[j])

                    return false;

            }

        }

        return true;

    }

};