给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。
这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应模式。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
题目分析:判断str中的字符是否符合Pattern的模式,比如,请说一个AABB型的成语。轰轰烈烈,隐隐约约等都是符合的,AABB就是pattern,轰轰烈烈就是str里的字符。我们就可以使用map将pattern与str以键值对的形式进行存储,先将"A"与"轰"存储,然后我就可以判断下一个"A"对应的是否是"轰",以此类推就可以判定最终得结果是false还是true。
代码如下:
public static void main(String[] args) {
String pattern = "abba";
String str = "dog cat caot dog";
System.out.println(wordPattern(pattern,str));
}
public static boolean wordPattern(String pattern, String str) {
String [] arr = str.split(" "); //对str进行分割,使其成为一个数组,(遇见空格就加逗号)
if(pattern.length() != arr.length) return false; //如果长度都不同就不需要再判断了,肯定是false
Map<Character,String> map = new HashMap<Character,String>();
for(int i = 0;i < pattern.length();i++){
if(map.containsKey(pattern.charAt(i))){ //判断在map中是否存在key值为pattern的第i个值
if(!map.get(pattern.charAt(i)).equals(arr[i])){ //如果map中已经存在了,就判断pattern.charAt(i)对应的arr[i]是否 一致,不一致就false
return false;
}
}else{
if(map.containsValue(arr[i])) { //判断在map中是否存在value值为arr的第i个值,不存在就将pattern.charAt(i),arr[i]放到map中
return false;
}
map.put(pattern.charAt(i),arr[i]);
}
}
return true;
}