给定两个字符串 s
和 t
,判断它们是否是同构的。
如果 s
中的字符可以按某种映射关系替换得到 t
,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入:s ="egg",
t ="add"
输出:true
示例 2:
输入:s ="foo",
t ="bar"
输出:false
示例 3:
输入:s ="paper",
t ="title"
输出:true
提示:
1 <= s.length <= 5 * 104
t.length == s.length
s
和t
由任意有效的 ASCII 字符组成
思路:这个题的意思就是,在s,t字符串内,不能存在一对多的形式,不能存在多对一的形式。
可以自身对应自身
学习:
创建map集合的两种方法
Map<Integer, String> map=new HashMap <>();
Map<Integer, String> map1=new HashMap <Integer, String>();
map集合put()、size()、remove()、get()
Map<Integer, String> map=new HashMap <>();
Map<Integer, String> map1=new HashMap <Integer, String>();
//集合中添加数据 put
map1.put(1,"2");
map1.put(2,"3");
map1.put(2,"5");
System.out.println(map1.size());//获取集合长度
System.out.println(map1);//遍历集合中所有数据
//get根据key获取value值
String s=map1.get(1);
System.out.println(s);
//remove根据key删除value值
System.out.println("------------");
String str=map1.remove(1);
System.out.println(str);
System.out.println(map1);
keySet()获取map中所有的key值
values()获取value值
Map<Integer, String> map1=new HashMap <Integer, String>();
map1.put(1,"li1");
map1.put(2,"li2");
map1.put(3,"li3");
map1.put(4,"li4");
//获取有value值
Collection<String> str= map1.values();
for(String string:str){//遍历
System.out.println(string);
class Solution {
public boolean isIsomorphic(String s, String t) {
Map<Character, Character> map1 = new HashMap<>();
Map<Character, Character> map2 = new HashMap<>();//定义两个map集合
for(int i=0,j=0;i<=s.length()-1;i++,j++)
{//遍历两个字符串
if(!map1.containsKey(s.charAt(i)))
{//当map1中不存在s中第i个字符对应的value时
map1.put(s.charAt(i),t.charAt(j));
//此时将s.charAt(i)作为key,t.char(j)作为value
}
if(!map2.containsKey(t.charAt(j)))
{//作用同上,将t中字符作为key,s中字符作为value
map2.put(t.charAt(j),s.charAt(i));
}
if(map1.get(s.charAt(i)) != t.charAt(j) || map2.get(t.charAt(j)) != s.charAt(i))
{//判断map中的key对于的value是否对应t字符串里相应的字符
return false;
}
}
return true;
}
}