LeetCode 0205. 同构字符串
Posted Tisfy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 0205. 同构字符串相关的知识,希望对你有一定的参考价值。
【LetMeFly】205.同构字符串
力扣题目链接:https://leetcode.cn/problems/isomorphic-strings/
给定两个字符串 s
和 t
,判断它们是否是同构的。
如果 s
中的字符可以按某种映射关系替换得到 t
,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入:s ="egg",
t ="add"
输出:true
示例 2:
输入:s ="foo",
t ="bar"
输出:false
示例 3:
输入:s ="paper",
t ="title"
输出:true
提示:
1 <= s.length <= 5 * 104
t.length == s.length
s
和t
由任意有效的 ASCII 字符组成
方法一:哈希
使用两个哈希表:
- 一个用来映射,记录
s
中的某个字符要映射为t
的哪个字符。 - 一个用来记录,记录
t
中的某个字符是否被映射过。
遍历一遍原始字符串,如果s
中的当前字符已经被映射过了,就看t
中当前字符是否和s
上次映射的字符相同。如果不同就返回false
。
反之,如果s
中出现了一个还没有被映射过的字符,那么就判断t
中对应的字符是否已经被映射过。如果已经被别的字母映射过,那么就返回false
,否则就建立映射。
遍历结束,返回true
。
- 时间复杂度 O ( n ) O(n) O(n),其中 n n n是单个字符串的长度
- 空间复杂度 O ( C ) O(C) O(C),其中 C C C是字符集的大小(本题为26)
AC代码
C++
class Solution
public:
bool isIsomorphic(string& s, string& t)
unordered_map<char, char> ma; // 映射
unordered_set<char> se; // 出现过
for (int i = t.size() - 1; i >= 0; i--) // 遍历
if (ma.count(s[i])) // s[i]已经映射过
if (ma[s[i]] != t[i]) // 看t[i]是否和上次映射的字符相同
return false; // 不同就返回false
else // s[i]还没建立过映射
if (se.count(t[i])) // 如果t[i]已经被映射过了
return false;
se.insert(t[i]); // 建立映射
ma[s[i]] = t[i];
return true;
;
总体效果还可以:
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126417676
以上是关于LeetCode 0205. 同构字符串的主要内容,如果未能解决你的问题,请参考以下文章