程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Lettocde_290_Word Pattern

Lettocde_290_Word Pattern

編輯:C++入門知識

Lettocde_290_Word Pattern


 

 

 

Given a pattern and a string str, find if str follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

Examples:

  1. pattern = abba, str = dog cat cat dog should return true.pattern = abba, str = dog cat cat fish should return false.pattern = aaaa, str = dog cat cat dog should return false.pattern = abba, str = dog dog dog dog should return false.

    思路:

    (1)題意為給定一種字符樣式和一個字符串,要求判斷該字符串是否為給定的樣式。

    (2)由於給定的pattern由若干字符組成,不同的字符應該對應不同的字符串,而相同的字符應該對應相同的字符串。這樣,可以通過Map對其進行實現。首先,將pattern轉化為字符數組pt,將待判斷的字符串轉為字符串數組split;其次,如果兩個數組的長度不等,則匹配失敗;否則,遍歷字符數組pt,如果當前字符在Map不存有,則判斷待判斷的字符串數組split在對應位置的值是否存於Map對應的Value中,如果存有,則匹配失敗,否則,將當前位置對應的字符和字符串存入Map中;如果當前遍歷的字符在Map對應的key中存有,判斷key對應的value是否為空,如果不為空,則判斷當前的value值和split對應的值是否相等,相等則繼續,否則匹配失敗;如果遍歷的字符在Map對應的key中不存有,則判斷value中是否存有split對應的值,如果有則匹配失敗,否則將當前key和value加入Map中。

    (3)詳情見下方代碼。希望本文對你有所幫助。

     

    import java.util.HashMap;
    import java.util.Map;
    
    public class Word_Pattern {
    
    	public static void main(String[] args) {
    		System.err.println(wordPattern(abba, dog dog dog dog));
    	}
    
    	public static boolean wordPattern(String pattern, String str) {
    		char[] pt = pattern.toCharArray();
    		String[] split = str.split( );
    
    		if (pt.length != split.length)
    			return false;
    
    		Map map = new HashMap();
    
    		for (int i = 0; i < pt.length; i++) {
    			if (!map.containsKey(pt[i])) {
    				if (map.values().contains(split[i])) {
    					return false;
    				} else {
    					map.put(pt[i], split[i]);
    				}
    			} else {
    				if (map.get(pt[i]) != null) {
    					if (map.get(pt[i]).equals(split[i])) {
    						continue;
    					} else {
    						return false;
    					}
    				} else {
    					if (map.values().contains(split[i])) {
    						return false;
    					} else {
    						map.put(pt[i], split[i]);
    					}
    				}
    			}
    		}
    		return true;
    	}
    }
    


     

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved