LeetCode:Word Pattern - 字符串模式匹配

一、題目名稱java

Word Pattern(字符串模式匹配)函數

二、題目地址code

https://leetcode.com/problems/word-pattern/leetcode

三、題目內容開發

英文:Given a pattern and a string str, find if str follows the same pattern.字符串

中文:給出一組模式(pattern)和一個字符串(str),查看字符串是否與模式匹配get

例如:string

  1. pattern = "abba",str = "dog cat cat dog",返回真hash

  2. pattern = "abba",str = "dog cat cat fish",返回假it

  3. pattern = "aaaa",str = "dog cat cat dog",返回假

  4. pattern = "abba",str = "dog dog dog dog",返回假

注意:

模式僅有小寫字母構成,字符串被單個空格字符隔開,字符串中每一個單詞都由小寫字母構成;模式和字符串的先後都不包含多餘的空格;模式中的每一個字母必須匹配一個字符串中長度至少爲1的單詞。

四、解題方法1

使用HashMap能夠很方便地解決本問題。

須要注意的是,模式中的兩個不一樣的字符,不能對應字符串中相同的單詞。

Java代碼以下:

import java.util.HashMap;

/**
 * @功能說明:LeetCode 290 - Word Pattern
 * @開發人員:Tsybius2014
 * @開發時間:2015年10月9日
 */
public class Solution {
    
    /**
     * 字符串模式匹配
     * @param pattern
     * @param str
     * @return
     */
    public boolean wordPattern(String pattern, String str) {
        
        if (pattern.isEmpty() || str.isEmpty()) {
            return false;
        }
        
        String[] s = str.split(" ");
        if (s.length != pattern.length()) {
            return false;
        }
        
        HashMap<Character, String> hashMap = new HashMap<Character, String>();
        for (int i = 0; i < pattern.length(); i++) {
            if (hashMap.containsKey(pattern.charAt(i))) {
                if (!hashMap.get(pattern.charAt(i)).equals(s[i])) {
                    return false;
                }
            } else if (hashMap.containsValue(s[i])) {
                return false;
            } else {
                hashMap.put(pattern.charAt(i), s[i]);
            }
        }
        
        return true;
    }
}

五、解題方法2

另外一個辦法須要利用HashMap中put函數的性質。

put函數的聲明以下:

public V put(K key, V value)

它的功能是將鍵值對存入map中,若是map中本來就包含要插入的鍵,將舊值替換爲新值。對於該函數的返回值,若是要插入的鍵在字典中不存在,則返回null,不然返回替換前的值。根據put函數的性質,能夠做出以下Java代碼:

import java.util.HashMap;
import java.util.Objects;

/**
 * @功能說明:LeetCode 290 - Word Pattern
 * @開發人員:Tsybius2014
 * @開發時間:2015年10月9日
 */
public class Solution {
    
    /**
     * 模式匹配
     * @param pattern
     * @param str
     * @return
     */
    public boolean wordPattern(String pattern, String str) {
        
        if (pattern.isEmpty() || str.isEmpty()) {
            return false;
        }
        
        String[] s = str.split(" ");
        if (s.length != pattern.length()) {
            return false;
        }
        
        @SuppressWarnings("rawtypes")
        HashMap<Comparable, Integer> hashMap = new HashMap<Comparable, Integer>();
        for (int i = 0; i < pattern.length(); i++) {
            if (!Objects.equals(hashMap.put(pattern.charAt(i), i), hashMap.put(s[i], i)))
                return false;
        }
        
        return true;
    }
}

END

相關文章
相關標籤/搜索