205. Isomorphic Strings
问题描述:
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.
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.
解析:
这个就是判断两个字符串是否是同构的,最简单的思路就是构造字符与字符之间的映射关系。
public boolean isIsomorphic(String s, String t) {
if(s==null || s.length()<=1)
return true;
HashMap<Character,Character> hm=new HashMap<Character,Character>();
for(int i=0;i<s.length();i++){
char ch1=s.charAt(i);
char ch2=t.charAt(i);
if(hm.containsKey(ch1)){
if(hm.get(ch1)==ch2)
continue;
else
return false;
}else{
if(hm.containsValue(ch2))
return false;
else
hm.put(ch1, ch2);
}
}
return true;
}
290. Word Pattern
问题描述:
Given a pattern
and a string str
, find if str
follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern
and a non-empty word in str
.
Examples:
-
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.
Notes:
You may assume pattern
contains only lowercase letters, and str
contains lowercase letters separated by a single space.
解析:
这个题目是不是跟上一个很相似,解题思路也是很相似,不过参考了网友的厉害的解题方法,核心代码:
//my key
public static boolean wordPattern_My(String pattern, String str) {
if(pattern==null || str==null)
return true;
String[] strs=str.split(" ");
if(pattern.length()!=strs.length)
return false;
HashMap<Character,String> map=new HashMap<Character,String>();
for(int i=0;i<pattern.length();i++){
if(map.containsKey(pattern.charAt(i))){
if(map.get(pattern.charAt(i)).equals(strs[i]))
continue;
else
return false;
}
else{
if(map.containsValue(strs[i]))
return false;
else
map.put(pattern.charAt(i), strs[i]);
}
}
return true;
}
//网友的解析
public static boolean wordPattern(String pattern, String str) {
if(pattern==null || str==null)
return true;
String[] strs=str.split(" ");
if(pattern.length()!=strs.length)
return false;
HashMap<Object,Integer> map=new HashMap<Object,Integer>();
for(int i=0;i<pattern.length();i++){
if(!Objects.equals(map.put(pattern.charAt(i),i),map.put(strs[i],i))){
return false;
}
}
return true;
}