此博客链接:https://www.cnblogs.com/ping2yingshi/p/14054909.html
单词规律
题目链接:https://leetcode-cn.com/problems/word-pattern/
题目
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
示例 3:
输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
示例 4:
输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
题解
思路:定义一个map来存Pattern中的每个字母,和相同字母的下标。判断给的字符串中在同一个字母中的下标位置中单词否相等。
方法:
1.定义一个map,key为String类型,value为ArraryList类型。
2.map的Key存储pattern中的字母,value中存储相同字母的下标。
3.把字符串s以空格分开以数组存储分开的单词。
4.判断map中每个key值对应的value中的ArraryList中的Index在单词数组中是否全部相等 。
代码
class Solution { public boolean wordPattern(String pattern, String s) { Map <String,ArrayList> map=new HashMap(); for(int i=0;i<pattern.length();i++) { ArrayList list=new ArrayList(); String ch = pattern.charAt(i) + ""; if(map.get(ch)==null) { list.add(i); map.put(ch,list); // map.put(ch,list.push(i)); } else{ map.get(ch).add(i); ///map.put(ch,list.push(i)); } } String str []=s.split(" "); // map.keyset // for(int i=0;i<map.size(),i++){ // int k=map.get(map.keyset(i)).size(); // } for(String tem:map.keySet()) { int k=map.get(tem).size(); ArrayList list = map.get(tem); // for(Integet index:list){ // } for(int i=0;i<k-1;i++) { if(str[Integer.parseInt(list.get(i))]!=str[Integer.parseInt(list.get(i+1))]) { return false; } } } return true; } }
问题
显示不能把对象转换成字符串。