LeetCode Isomorphic Strings
2015-07-23 04:41
375 查看
原题链接在此: 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
return true.
Given
return false.
Given
return true.
Note:
You may assume both s and t have the same length.
Hide Tags
Hash Table
这道题用两个Map建立s和t中对应Character的关系,一个是s到t的对应,一个是t到s的对应,要注意的是要双向检测两个Map里的对应值,否则就会出现下列错误:
Input:"ab",
"aa"
Output:true
Expected:false
因为没有检查hm2,即使“aa”的第二个值 与 hm2中已有的a相同,也不会返回false。
Time Complexity: O(s.length()). Space: O(s.length()).
AC Java:
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.
Note:
You may assume both s and t have the same length.
Hide Tags
Hash Table
这道题用两个Map建立s和t中对应Character的关系,一个是s到t的对应,一个是t到s的对应,要注意的是要双向检测两个Map里的对应值,否则就会出现下列错误:
Input:"ab",
"aa"
Output:true
Expected:false
因为没有检查hm2,即使“aa”的第二个值 与 hm2中已有的a相同,也不会返回false。
Time Complexity: O(s.length()). Space: O(s.length()).
AC Java:
public class Solution { public boolean isIsomorphic(String s, String t) { if(s == null && t == null){ return true; } if(s == null || t == null){ return false; } if(s.length() != t.length()){ return false; } Map<Character, Character> hm1 = new HashMap<Character, Character>(); Map<Character, Character> hm2 = new HashMap<Character, Character>(); int len = s.length(); for(int i = 0; i<len; i++){ if(hm1.containsKey(s.charAt(i)) && hm1.get(s.charAt(i)) != t.charAt(i)){ return false; } if(hm2.containsKey(t.charAt(i)) && hm2.get(t.charAt(i)) != s.charAt(i)){ return false; } hm1.put(s.charAt(i), t.charAt(i)); hm2.put(t.charAt(i), s.charAt(i)); } return true; } }
相关文章推荐
- IO流(File类,IO流的分类,字节流和字符流,转换流,缓冲流,对象序列化)
- Win 10人工智能战略转型必胜!
- 构建Spark的IDE开发环境
- linux 出行日记(2)
- C++面向对象编程(二)之 深拷贝和浅拷贝
- 全栈软件工程师和系统架构师的异同
- 定义 新类 继承CCSprite ,记得重写工厂方式。
- 开发知识MISC
- 查看文件尾部最新信息和进程数查看命令
- 诺贝尔获奖者中村修二:东亚教育问题的根源在哪?
- opencv实现canopy算法
- 6.6目录操作
- 设置文件属性,修改文件存取时间
- cocos2d-x 入门之Director,SceneLayer,Sprite
- Codeforces Round #313 (Div. 2)B.B. Gerald is into Art
- 023.Key 路径
- 022.KVC 如何处理不合理的nil值
- 021.forUndefinedKey 处理不存在的key
- 020.KVC 底层执行机制
- 019.KVC 键值编码