题意描述:
Isomorphic Strings(同构字符串):给定两个字符串,判断它们是否为同构字符串,如下:
Given "egg", "add", return true. Given "foo", "bar", return false. Given "paper", "title", return true.
Word Pattern(单词模型):给定两个字符串,一个是由字符组成,另是一个是由字符串组成,判断它们是否为同构字符串,如下:
pattern = "abba", str = "dog cat cat dog" should return true. pattern = "abba", str = "dog cat cat fish" should return false. pattern = "aaaa", str = "dog cat cat dog" should return false. pattern = "abba", str = "dog dog dog dog" should return false.
Isomorphic Strings(同构字符串):相当于考察两个字符串的形式是否相同,想到利用map表这个特殊的数据结构,str1中的每个字符对应str2中的每个字符。
提交失败"aa""ab"=>false(是对的);"ab""aa"=>true(错误),所以方法应该验证字符之间的一一对应关系验证字符之间一一对应的关系,利用set
public class Solution { public boolean isIsomorphic(String s, String t) { if(s.length() != t.length())//两字符串长度不相等 return false; Map<Character, Character> map = new HashMap<Character, Character>(); Set<Character> set = new HashSet<Character>(); for(int i=0; i<s.length(); i++){ char ch = s.charAt(i); if(map.containsKey(ch)){ if(!map.get(ch).equals(t.charAt(i))) return false; }else{ if(set.contains(t.charAt(i)))//保证单词之间一一对应的关系 return false; map.put(s.charAt(i), t.charAt(i)); set.add(t.charAt(i)); } } return true; } }
public class Solution { public boolean wordPattern(String pattern, String str) { String[] strs = str.split(" "); if(pattern.length() != strs.length) return false;//pattern的长度应该和字符串的长度一致才能进行匹配,否则不匹配 Map<Character, String> map = new HashMap<>();//char与String的映射 Set<String> unique = new HashSet<>();//保存String,避免出现多对一的情况 for(int i=0; i<pattern.length(); i++){ char c = pattern.charAt(i); if(map.containsKey(c)){ if(!map.get(c).equals(strs[i])) return false; }else{ if(unique.contains(strs[i])) return false; map.put(c, strs[i]); unique.add(strs[i]); } } return true; } }