問題描述:
比較兩個字符串A和B,確定A中是否包含B中所有的字符。字符串A和B中的字符都是 大寫字母。
樣例
給出 A = "ABCD" B = "ACD",返回 true
給出 A = "ABCD" B = "AABC", 返回 false
注意事項
在 A 中出現的 B 字符串里的字符不需要連續或者有序。
問題分析:
實質上利用的是哈希表的思想。只有大寫字母,一共26個,遍歷A的時候,往里面壓,遍歷B的時候,往外邊彈,如果不夠彈,則不包含。
問題解決:
一種比較麻煩的解法:
public class Solution { /** * @param A : A string includes Upper Case letters * @param B : A string includes Upper Case letter * @return : if string A contains all of the characters in B return true else return false */ public boolean compareStrings(String A, String B) { // write your code here Map<String, Integer> map = new HashMap<String, Integer>(); for (int i = 0; i < 26; i++) { map.put((char)(i + 'A') + "", 0); } for (int i = 0; i < A.length(); i++) { String key = A.charAt(i) + ""; Integer count = map.get(key); map.put(key, ++count); } for (int i = 0; i < B.length(); i++) { String key = B.charAt(i) + ""; Integer count = map.get(key); if (map.containsKey(key)) { map.put(key, --count); } if (count < 0) { return false; } } return true; } }
一種簡單的解法(本質一樣):
public class Solution { /** * @param A : A string includes Upper Case letters * @param B : A string includes Upper Case letter * @return : if string A contains all of the characters in B return true else return false */ public boolean compareStrings(String A, String B) { // write your code here int[] index = new int[26]; for (int i = 0; i < A.length(); i++) { index[A.charAt(i) - 'A']++; } for (int i = 0; i < B.length(); i++) { index[B.charAt(i) - 'A']--; if(index[B.charAt(i) - 'A'] < 0){ return false; } } return true; } }
