描述
比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母
在 A 中出现的 B 字符串里的字符不需要连续或者有序。
您在真实的面试中是否遇到过这个题?
是
样例
给出 A = "ABCD"
B = "ACD"
,返回 true
给出 A = "ABCD"
B = "AABC"
, 返回 false
注意重复,我采取的方法是将已经比较过的字母改写为NULL
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) {
// write your code here
if(B.length()==0) return true;
if(A.length()==0) return false;
string m_string=A;
for(int i=0;i<B.length();i++){
for(int j=0;j<A.length();j++){
if(m_string[j]==B[i]){
m_string[j]=NULL;
break;
}
if(j==A.length()-1) return false;
}
}
return true;
}
};
牺牲控件换取时间,新建两个容器用于存方每个字母出现的次数:
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) {
// write your code here
vector<int> m_A(26,0);
vector<int> m_B(26,0);
for(int i=0;i<A.length();i++) m_A[(int)(A[i]-'A')]++;
for(int i=0;i<B.length();i++) m_B[(int)(B[i]-'A')]++;
for(int i=0;i<26;i++){
if(m_A[i]<m_B[i]) return false;
}
return true;
}
};