原题
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.
题意
给出两个字符串,判断字符串是否是同构的字符串
思路
定义一个hashmap,一一对应的关系,如果出现不一样的一样对应,则说明不是同构。
同时定义一个set集合,保证map中的值是唯一对应的,比如“ab”和“aa”就不是同构的,因为a对应a,但是b就不能对应a了,得对应一个非a的数值。
这里考察的hashmap的使用方法。
代码
public class Solution {
public boolean isIsomorphic(String s, String t) {
if(s.length()!=t.length())return false;
HashSet<Character>set=new HashSet<>();
HashMap<Character, Character>map=new HashMap<>();
for(int i=0;i<s.length();i++){
//map集合中不包含s的第i和字符,并且t的第i个字符没有在集合中出现,则把这一对应关心添加到map中
if(!map.containsKey(s.charAt(i))){
if(!set.contains(t.charAt(i))){
map.put(s.charAt(i), t.charAt(i));
set.add(t.charAt(i));
}
//否则则不是同构的关系
else return false;
}
//如果map中包含s的第i个字符,则看第i个对应的值是否是和t中第i个字符相同
else{
if(map.get(s.charAt(i))!=t.charAt(i))return false;
}
}
return true;
}
}
原题链接
该题和290. Word Pattern这个题相似,见博客http://blog.csdn.net/weifang0626/article/details/53958476