比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母
您在真实的面试中是否遇到过这个题?
Yes
哪家公司问你的这个题?
Airbnb Alibaba Amazon Apple Baidu Bloomberg Cisco Dropbox Ebay Facebook Google Hulu Intel Linkedin Microsoft NetEase Nvidia Oracle Pinterest Snapchat Tencent Twitter Uber Xiaomi Yahoo Yelp Zenefits
感谢您的反馈
样例
给出 A = "ABCD"
B = "ACD"
,返回 true
给出 A = "ABCD"
B = "AABC"
, 返回 false
注意
标签
Expand
在 A 中出现的 B 字符串里的字符不需要连续或者有序。
相关题目 Expand
- 1 (string),(cracking-the-coding-interview) 容易 两个字符串是变位词 28 % 3 (basic-implementation),(string) 困难 转换字符串到整数 15 %
- 该解法可以,但是相当于多了一个O(n)的空间复杂度,可以将arr1优化,如下优化解法
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
if(null==B||B.length()==0) return true;
if(A==null||0==A.length()) return false;
boolean flag = true;
int arr[] = new int[256];
for(int i=0;i<arr.length;i++){
arr[i] = 0;
}
int arr1[] = new int[256];
for(int i=0;i<arr1.length;i++){
arr1[i] = 0;
}
for(int i=0;i<A.length();i++){
arr[A.charAt(i)]++;
}
for(int i=0;i<B.length();i++){
arr1[B.charAt(i)]++;
}
for(int i=0;i<arr1.length;i++){
if (arr[i]<arr1[i]) {
flag = false;
break;
}
}
return flag;
}
}
优化后的代码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) {int[] record = new int[256];Arrays.fill(record,0);for (int i=0;i<A.length();i++){int ind = (int) A.charAt(i);record[ind]++;}
for (int i=0;i<B.length();i++){int ind = (int) B.charAt(i);if (record[ind]==0) return false;else record[ind]--;}
return true;}}