Leetcode 205. 同构字符串

Posted 阿十三

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 205. 同构字符串相关的知识,希望对你有一定的参考价值。

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

如果 中的字符可以被替换得到 ,那么这两个字符串是同构的。

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

示例 1:

输入: s = "egg", t = "add"
输出: true

示例 2:

输入: s = "foo", t = "bar"
输出: false

示例 3:

输入: s = "paper", t = "title"
输出: true

说明:
你可以假设 t 具有相同的长度。

 

思路:如果你用的是JAVA的话上去就直接拍hashmap就可以解决这个问题

但是如果你不会用则可以用数组标记,用一个变量top标记当前出现的字母是第几个

比如 样例的"egg",e是第一个出现的,g是第二个出现的,然后你用一个数组标记这些字符是否出现过,如果出现过,则直接把把他们的顺序赋值到ans1数组内,如果没有则标记他们是第几个出现的

这样子egg在ans1内就是122,foo也是122这样子就是同构的

foo则是122,bar则是123

就不是同构的

技术分享图片
 1 int mark[1000001];
 2 int ans1[101000],ans2[010010];
 3 bool isIsomorphic(char* s, char* t)
 4 {
 5     memset(mark,0,sizeof(mark));
 6     memset(ans1,0,sizeof(ans1));
 7     memset(ans2,0,sizeof(ans2));
 8 
 9     int len1=strlen(s),len2=strlen(t);
10     if(len1!=len2)
11         return false;
12 
13     int top=1;///记录出现了几个的字符
14     for(int i=0;i<len1;i++)
15     {
16         if(mark[(int)s[i]]==0)
17         {
18             mark[(int)s[i]]=top;///标记字符
19             ans1[i]=mark[(int)s[i]];///赋值
20             top++;
21         }
22         else {
23 
24             ans1[i]=mark[(int)s[i]];
25 
26         }
27     }
28     memset(mark,0,sizeof(mark));
29     top=1;
30     for(int i=0;i<len2;i++)
31     {
32         if(mark[(int)t[i]]==0)
33         {
34             mark[(int)t[i]]=top;
35             ans2[i]=mark[(int)t[i]];
36             top++;
37         }
38         else {
39 
40             ans2[i]=mark[(int)t[i]];
41 
42         }
43     }
44 
45     int flag=0;
46     for(int i=0;i<len1;i++)
47         if(ans1[i]!=ans2[i])
48             return false;
49             
50     return true;
51 }
View Code

 

以上是关于Leetcode 205. 同构字符串的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode--205--同构字符串

Leetcode 205. 同构字符串

leetcode-205-同构字符串

LeetCode 205. Isomorphic Strings (同构字符串)

LeetCode 205. 同构字符串

LeetCode - #205 同构字符串