leecode209:单词规律

leecode209:单词规律

题目内容

给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

示例1:

输入: pattern = “abba”, str = “dog cat cat dog”
输出: true

示例 2:

输入:pattern = “abba”, str = “dog cat cat fish”
输出: false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XIgGXthq-1594830019630)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20200715174842214.png)]

不匹配的情况:

  • pattern和str组数不同eg:abb与dog cat cat dog
  • pattern对应相同,str对应不同
  • pattern对应不同,str对应相同

我的解法

使用到的java知识

字符串a不能通过下标访问,如需通过下标访问解决办法2种

  • 提取为字符:a.charAt(2)
    提取为字符串:a.substring(2, 3)

数组长度.length,字符串.length()

java分割字符串:split函数:此处以空格分割即可

讲解博客参见

讲解博客2

class Solution {
    public boolean wordPattern(String pattern, String str) {
        //分割样式字符串
        //分割str字符串?或者通过下标访问
        //对比:默认true,不满足则置为false
        //暴力枚举:
       String strSplit[]=str.split(" ");
       if(pattern.length()!=strSplit.length
	    		   )
	    	   return false;
        for(int i=0;i<pattern.length();i++)
	        {
	            for(int j=i+1;j<pattern.length();j++)
	            {
	                if(pattern.charAt(i)==pattern.charAt(j))//pattern.[i].equals(pattern[j])报错显示,需要数组而类型是字符串
	                {
	                    if(!strSplit[i].equals(strSplit[j]))
	                    return false;

	                }
                     else
	                {
	                	if(strSplit[i].equals(strSplit[j]))
	                		return false;
	                }
	            }
                
	        }
            return true;
    }
    
}

模范题解

题解一:hashmap

java+hashMap 这道题说的是对应关系,那首先想到的集合就是Map,将key(a)-value(dog)存在一起,每当遇到一个字母就去查看对应的单词。 失败有两种情况: 1.key存在,经过查找字母对应的单词和这个单词不匹配; 2.key不存在,但是这个单词已经被存了

public static boolean wordPattern(String pattern, String str) {
        if(pattern == null || str==null) return false;
        String[] string = str.split(" ");
        if(pattern.length() != string.length) return false;
        HashMap<Character,String> map = new HashMap<>();

        for(int i=0; i<pattern.length(); i++){
            char tmp = pattern.charAt(i);
            //parttern的单个值作为键,str的一个单词为值遍历插入HashMap
            
            //key已经在
            if(map.containsKey(tmp)){
                //不对应就失败
                if(!map.get(tmp).equals(string[i])) return false;
            }
            //key不存在
            else{
                //两个value的值一样 a-dog b-dog->false:对应我暴力枚举的pattern不同,str相同
                if (map.containsValue(string[i])) return false;
                else
                //添加k-v值
                map.put(tmp,string[i]);
            }
        }
        return true;
    }

题解2;法一:hashmap及优化;法二:映射

(涉及映射集合,暂时不看,继续刷题)

猜你喜欢

转载自blog.csdn.net/qq_44274233/article/details/107373817
今日推荐