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

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

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

示例 1:

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

示例 2:

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

示例 3:

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

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

思路:

我们拿"paperp"和"titlel"举例:

(1)首先我们会定义一个哈希表(Map)来完成一种一一对应的关系,第一次进来时我们把p和t对应

p <==> t

(2)这时我们继续判断下一个字符a和i,我们在哈希表中并没有找到以a为key的项,并且t作为value也并没有出现在其他项中,所以我们添加a t键值对

p <==> t  a <==> i

(3)继续,我们又找到了p字符和t字符,我们可以在哈希表中找到以p为key的项,并且value是t,而我们此时遍历到的确实是t,代表匹配上了,继续下一个

(4)拿到e和l字符,哈希表没有以e为key的项,并且l也没有作为value出现在其他项内,所以添加键值对

p <==> t  a <==> i e <==> l

(5)继续拿到r和e字符串,哈希表内没有找到以r为key的项,并且e没有作为value出现在其他项内,所以添加键值对

p <==> t  a <==> i e <==> l  r <==> e

(6)继续拿到p和l,这时要注意,我们可以在哈希表内找到以p为key的项,并且该项的value不是l !!所以这时没有匹配上,整段垮掉,返回false

代码如下:

public class LeetCode205 {

	public static boolean isIsomorphic(String s, String t) {
if (s.length() != t.length()) {
return false;
}
char[] ss = s.toCharArray();
char[] tt = t.toCharArray();
Map<Character, Character> map = new HashMap<>();
for (int sIndex = 0, tIndex = 0; tIndex < tt.length; tIndex++, sIndex++) {
if (!map.containsKey(ss[sIndex])) {
if (!map.containsValue(tt[tIndex])) {
map.put(ss[sIndex], tt[tIndex]);
} else {
return false;
}
}
if (!map.get(ss[sIndex]).equals(tt[tIndex])) {
return false;
}
continue;
}
return true;
}
}

  

LeetCode205----同构字符串的更多相关文章

  1. [Swift]LeetCode205. 同构字符串 | Isomorphic Strings

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  2. [LeetCode] Isomorphic Strings 同构字符串

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  3. LeetCode 205:同构字符串 Isomorphic Strings

    题目: 给定两个字符串 s 和 *t*,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 *t* ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字 ...

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

    205. 同构字符串 205. Isomorphic Strings

  5. Java实现 LeetCode 205 同构字符串

    205. 同构字符串 给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序. ...

  6. 【leetcode 简单】 第五十九题 同构字符串

    给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一 ...

  7. LeetCode OJ:Isomorphic Strings(同构字符串)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  8. Q205 同构字符串

    给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一 ...

  9. 205 Isomorphic Strings 同构字符串

    给定两个字符串 s 和 t,判断它们是否是同构的.如果 s 中的字符可以被替换最终变成 t ,则两个字符串是同构的.所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一个字 ...

  10. leetcode.字符串.205同构字符串-Java

    1. 具体题目 给定两个字符串 s 和 t,判断它们是否是同构的.如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的.所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不 ...

随机推荐

  1. 求两个等长的已排序数组的中位数(《算法导论》P113习题9.3-8)

    [问题]设X[1...n]和Y[1...n]为两个数组,每个都包含n个已排序好的数.给出一个求数组X和Y中所有2n个元素的中位数的.O(lgn)时间的算法. [解析]O(lgn)的时间复杂度就是二分查 ...

  2. docker启动 elasticsearch 修改 xmx xms 堆内存大小修改

    用docker 安装的elasticsearch 5.6版本默认堆内存最大设置的2G 可以通过如下方法修改 [root@nova-92 logs]# find /var/lib/docker/ -na ...

  3. linux之getopts

    在编写shell脚本中,经常要处理一些输入参数,在使用过程中发现getopts更加方便,能够很好的处理用户输入的参数和参数值. getopts用于处理用户输入参数,举例说明使用方法: while ge ...

  4. Linux文件的管理

    创建:touch  vim/vi  echo重定向  cat touch 管理: atime  mtime touch  文件名  //如果文件不存在,不创建文件 删除:mv /tmp find |x ...

  5. How to Change the Default Theme Appearance [editing with no theme]

    Windows Live Writer has the ability to allow users to see their blog as it'd be posted as they are c ...

  6. 《浏览器工作原理与实践》<07>变量提升:JavaScript代码是按顺序执行的吗?

    讲解完宏观视角下的浏览器后,从这篇文章开始,我们就进入下一个新的模块了,这里我会对 JavaScript 执行原理做深入介绍. 今天在该模块的第一篇文章,我们主要讲解执行上下文相关的内容.那为什么先讲 ...

  7. Ubuntu系统---安装Caffe (+OpenCV+Python+CPU-only)

    安装配置Ubuntu14.04+Caffe (+OpenCV+Python+CPU-only) 记录 [作者:Wu Ping.时间:20180428.] 本人已经安装很多次的Caffe了:从开始的初探 ...

  8. 电脑设置自动关机和取消自动关机代码bat命令

    一.设置定时关机bat 1.首先在桌面新建一个记事本txt 2.打开记事本,输入“shutdown -s -t 1260 ”1260是指1260秒,即21分钟内关机.可以修改成别的时间. 3.保存后, ...

  9. Java&Selenium自动化测试实现页面元素、页面对象及测试代码分离

    一.摘要 本篇博文将介绍自动化测试实现页面元素.页面对象及测试代码分离在自动化框架中的实现 二.解析页面元素定位信息 首先,将页面元素与实际的代码分离,首先我们将页面元素定位信息和定位表达式保存在属性 ...

  10. (转)为什么收到三个重复的ACK意味着发生拥塞?

    三次重复的ACK,可能是丢包引起的,丢包可能是网络拥塞造成的,也可能是信号失真造成的. 三次重复的ACK,也有可能是乱序引起的,而乱序和网络拥塞没有直接关系. 如果就写这两行,感觉什么都没写,接下来的 ...