LeetCode___290.单词模式

给定一种 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;
		
	        
    }

猜你喜欢

转载自blog.csdn.net/DJGXGG/article/details/87947335
今日推荐