Leetcode----205Isomorphic Strings

Leetcode—–Isomorphic Strings

链接:https://leetcode.com/problems/isomorphic-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.

Thought:

字符串同构有两种情况:每个字符串中没有相同的字符;若该字符串中有相同的字符,则另一字符串中相同位置也有相同的字符。

而字符串函数strchr的功能是在一个字符串中找到与该字符的第一个匹配之处,函数原型如下:
char* strchr(char* str, char c)

这样可以搞两个指针分别指向这两个字符串,判断位置是否相等,可以和字符串的首字符比较。若出现相同字符,则两字符串中的该字符离首字符的距离应该相等。

Solution:

// 假设字符串长度相等
bool isIsomorphic(char* s, char* c)
{
    char* pTos = s;
    char* pTot = t;

    if ((NULL == s) || (NULL == t))
    {
        return false;
    }

    while (*pTos != NULL)
    {
        if ((strchr(s, *pTos) - s) != (strchr(t, *pTot) - t))
        {
            return false;
        }

        pTos++;
        pTot++;
    }

    return true;
}

别人家的代码:

bool isIsomorphic(char* s, char* c)
{
    int length = strlen(s);
    // 定义s和t的辅助数组
    int auxOfs[256] = {0};
    int auxOft[256] = {0};

    for (int i = 0 ; i < length; i++)
    {
        if (auxOfs[s[i]] != auxOft[t[i]])
        {
            return false;
        }

        auxOfs[s[i]] = i + 1;
        auxOft[t[i]] = i + 1;
    }

    return true; 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值