【題目】
比較兩個(gè)字符串A和B前硫,確定A中是否包含B中所有的字符胞得。字符串A和B中的字符都是大寫字母
樣例
給出 A = "ABCD" B = "ACD",返回 true
給出 A = "ABCD" B = "AABC"屹电, 返回 false
【分析】
實(shí)質(zhì)上利用的是哈希表的思想阶剑。只有大寫字母,一共26個(gè)嗤详,遍歷A的時(shí)候个扰,往里面壓,遍歷B的時(shí)候葱色,往外邊彈递宅,如果不夠彈,則不包含
【思路一】
定義一個(gè)大小為26的數(shù)組(因?yàn)榇髮懽帜赣?6個(gè))苍狰,遍歷字符串A办龄,將字符串A中出現(xiàn)的字符記錄到數(shù)組中,出現(xiàn)一次加1淋昭;遍歷字符串B俐填,將出現(xiàn)的字符記錄到數(shù)組中,出現(xiàn)一次減1。如果字符串B中的字符位置的數(shù)組大小小于0則字符串B不包含于字符串A躲因。
【思路二】
【Java代碼 思路一】
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
//利用哈希表的算法定義數(shù)組,因?yàn)樽址谴髮懽帜感具郑詳?shù)組大小為26.
int[] index = new int[26];
//將字符串A中的字符出現(xiàn)個(gè)數(shù)記錄在數(shù)組中
for(int i = 0; i < A.length(); i++){
index[A.charAt(i) - 'A']++;
}
//遍歷字符串B
for(int j = 0; j < B.length(); j++){
index[B.charAt(j) - 'A']--;
//如果該位置的大小小于0則代表在B.charAt(j)在字符串B中出現(xiàn)的次數(shù)大于在A中出現(xiàn)的次數(shù)
if(index[B.charAt(j) - 'A'] < 0)
return false;
}
return true;
}
}