Day 23
题目描述
思路
见代码
class Solution {
public boolean isIsomorphic(String s, String t) {
if(s.length()!=t.length()){//如果两个字符串长度不同 直接不可能同构
return false;
}
HashMap<Character,Character>map=new HashMap<>();//存放s到t的映射
HashMap<Character,Character>map1=new HashMap<>();//存在t到s的映射
for(int i=0;i<s.length();i++){
if(map.containsKey(s.charAt(i))){//如果s的字符存在对t字符的映射
if(map.get(s.charAt(i))!=t.charAt(i)){
//不等说明一个s[i]字符对应的不止一个t的字符
return false;
}
}
else{
if(map1.containsKey(t.charAt(i))){
//防止出现aabc和bbaa的情况
return false;
}
else{
map.put(s.charAt(i),t.charAt(i));
map1.put(t.charAt(i),s.charAt(i));
}
}
}
return true;
}
}
题目描述
思路
做法如下:
- 首先需要将s按照" "分离成字符串数组
- 类似于上题的做法(见代码)
class Solution {
public boolean wordPattern(String pattern, String s) {
String[] split = s.split(" ");//根据“ ”分离为字符串数组
if(split.length!=pattern.length()){//剩下的类似于上题目 s和pattern
return false;
}
HashMap<Character, String> map = new HashMap<>();
HashMap<String,Character> map1 = new HashMap<>();
for(int i=0;i<pattern.length();i++ ){
if(map.containsKey(pattern.charAt(i))){
if(!map.get(pattern.charAt(i)).equals(split[i])){
return false;
}
}
else{
if(map1.containsKey(split[i])){
return false;
}
map.put(pattern.charAt(i),split[i]);
map1.put(split[i],pattern.charAt(i));
}
}
return true;
}
}