題目要求:
比較兩個字符串A和B,確定A中是否包含B中所有的字符。字符串A和B中的字符都是 大寫字母
樣例
給出 A = "ABCD" B = "ACD",返回 true
給出 A = "ABCD" B = "AABC", 返回 false
注意事項
在 A 中出現的 B 字符串裏的字符不需要連續或者有序。
代碼實現:
class Solution {
public:
/**
* @param A: A string
* @param B: A string
* @return: if string A contains all of the characters in B return true else return false
*/
bool compareStrings(string &A, string &B)
{
int num = B.size();
for(int j=0;j<B.size();j++)
{
for(int i=0;i<A.size();i++)
{
if(B[j] == A[i] )
{
A[i] = 1; //查找且匹配的數組元素,用其他值替換,這樣可以防止數組中出現相同字母查找時出錯
num--;
break; //一旦滿足滿足條件,跳出最近一層的循環
}
}
}
if(num == 0)
{
return true;
}
else
{
return false;
}
}
};
設計思路:
對於B中的每一個元素,首先選取位置0處的元素,在A中查找是否與之相等的元素。
若有,將A對應位置上的元素賦值位1進行覆蓋,num--,同時跳出最近的循環;
若沒有,則繼續 j++ ,繼續循環。
最後判斷num是否等於0(如果全都匹配上了,則num--最後會減到0).
上述方法可以AC。
參考答案:
class Solution {
public:
/**
* @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
*/
bool compareStrings(string A, string B) {
int count[26];
for (int i = 0; i < 26; i++) {
count[i] = 0;
}
for (int i = 0; i < A.length(); i++) {
count[A[i] - 'A'] ++;
}
for (int i = 0; i < B.length(); i++) {
count[B[i] - 'A'] --;
if (count[B[i] - 'A'] < 0) {
return false;
}
}
return true;
}
};