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.同构的判断是:一个字符串中的字符被替换后能得到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.
字符串问题,一直就不太明白,也是练得太少了,所以做过一次笔试题就知道自己的欠缺了赶紧来补补,先把easy的弄完
keyword:
相同-----set(不能重复元素)
替换-----hashMap(映射关系)
s的字符对应t中的字符,chars相当于key,chart相当于value,key自带不重复属性,所以要求t的字符不能在Set里面重复
public class Solution {
public boolean isIsomorphic(String s, String t) {
if(s==null||t==null)
return false;
if(s.length() != t.length())
return false;
Map<Character, Character> map=new HashMap<>();
Set<Character> set=new HashSet<>();
int index=0;
char chars,chart;
for(;index<s.length();index++)
{
chars=s.charAt(index);
chart=t.charAt(index);
//首先判断map里面有没有这个键
//为什么不是先判断set呢,最开始我也想来着,但是作为映射的值,似乎比起key晚一点判断不算什么吧,如果尝试一下流程,发现还是先判断map比较合适
if(!map.containsKey(chars))
{ if(!set.contains(chart))//当chars在map中没有,chart还没有被其他的字母映射的时候
{
map.put(chars, chart);//就可以放进去啦
set.add(chart);
}
else return false;
}
//
else {
//这时候map里面已经存在映射关系了,
if(map.get(chars)!=chart)//相等就继续循环,一旦不相等
return false;
}
}
return true;
}
}