首页 > 其他 > 详细

同构字符串

时间:2020-08-27 11:14:12      阅读:75      评论:0      收藏:0      [点我收藏+]

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

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

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

示例 1:

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

示例 2:

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

示例 3:

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

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

解法:

我们可以利用一个 map 来处理映射。对于 s 到 t 的映射,我们同时遍历 s 和 t ,假设当前遇到的字母分别是 c1 和 c2 。

如果 map[c1] 不存在,那么就将 c1 映射到 c2 ,即 map[c1] = c2。

如果 map[c1] 存在,那么就判断 map[c1] 是否等于 c2,也就是验证之前的映射和当前的字母是否相同。

对于这道题,我们只需要验证 s - > t 和 t -> s 两个方向即可。如果验证一个方向,是不可以的。

举个例子,s = ab, t = cc,如果单看 s -> t ,那么 a -> c, b -> c 是没有问题的。

必须再验证 t -> s,此时,c -> a, c -> b,一个字母对应了多个字母,所以不是同构的。

代码的话,只需要调用两次上边的代码即可。
 1 public boolean isIsomorphic(String s, String t) {
 2         return isIsomorphicTest(s,t) && isIsomorphicTest(t,s);
 3     }
 4 
 5     public boolean isIsomorphicTest(String s, String t) {
 6         Map<Character,Character> map = new HashMap<>();
 7         for(int i = 0;i < s.length();i ++){
 8             char a = s.charAt(i);
 9             char b = t.charAt(i);
10             if(map.containsKey(a)){
11                 if(map.get(a)!=b){
12                     return false;
13                 }
14             }else{
15                 map.put(a,b);
16             }
17         }
18         return true;
19     }

 

同构字符串

原文:https://www.cnblogs.com/0error0warning/p/13569985.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!