LintCode:638.字符同构
程序员文章站
2022-07-16 11:53:07
...
题目:给定两个字符串 s 和 t ,确定它们是否是同构的。两个字符串是同构的如果 s 中的字符可以被替换得到 t。所有出现的字符必须用另一个字符代替,同时保留字符串的顺序。 没有两个字符可以映射到同一个字符,但一个字符可以映射到自己。
分析:采用hashmap来存放字符串s和字符串t之间的映射关系,同时在遍历s串的同时,利用set来存放字符串t,目的在于每当hashmap中不存在一个字符时,而想要把当前下标的s串和t串放入hashmap中时,判断此时set是否有当前下标的t串,如果存在的话,说明有多对一的映射关系存在,则直接返回false;而如果hashmap中存在当前下标的s串,则判断它的value值是否与当前下标的t串相等,如果不等的话返回false,因为此时不是一对一的映射关系。
public class Solution {
/**
* @param s: a string
* @param t: a string
* @return: true if the characters in s can be replaced to get t or false
*/
public boolean isIsomorphic(String s, String t) {
// write your code here
if(s.length()<=0 ||t.length()<=0) return false;
HashMap<Character,Character> hashMap = new HashMap<>();
Set<Character> set=new HashSet<>();
for(int i=0;i<s.length();i++){
char chars=s.charAt(i);
char chart=t.charAt(i);
//键未出见过保存映射关系
if(!hashMap.containsKey(chars)){
if(set.contains(chart)){ //存在多对一映射
return false;
}else{
hashMap.put(chars,chart);
set.add(chart);
}
}else{
if(hashMap.get(chars)!=chart){ //不是一对一的映射关系
return false;
}
}
}
return true;
}
}
上一篇: 265. 粉刷房子 II
下一篇: LintCode 题目:字符串置换