两题看似一样,其实不一样,只能一个用数组,一个用map
205. 同构字符串
问题
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身
例子
思路
-
方法1
将两个字符串中的字符都映射到第三方数字上,将所有字母初始都映射到 0。如果相同下标时,对应的数字不一样,说明不是,立即返回false。否则,如果都为0,设置映射的数字
-
方法2
代码
//方法1
class Solution {
public boolean isIsomorphic(String s, String t) {
if(s.length()!=t.length()) return false;
int[] arr=new int[128];
int[] arr2=new int[128];
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
char cc=t.charAt(i);
if(arr[c]!=arr2[cc]) return false;
else {
if(arr[c]==0) {
//之所以+1,因为arr初始化时为0,
arr[c]=i+1;
arr2[cc]=i+1;
}
}
}
return true;
}
}
//方法2
290. 单词规律
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母
class Solution {
public boolean wordPattern(String pattern, String str) {
String[] arr = str.split(" ");
if(arr.length!=pattern.length()) return false;
Map<Character,String> map = new HashMap<>();
for(int i=0; i<arr.length;i++) {
char c = pattern.charAt(i);
String s = arr[i];
if(!map.containsKey(c)){
if(map.containsValue(s)) return false;
map.put(c,s);
}
else{//map.containsKey(c)
if(!map.get(c).equals(s)) return false;
}
}
return true;
}
}