比较字符串
题目
比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母
注意事项
在 A 中出现的 B 字符串里的字符不需要连续或者有序。
样例
给出 A = “ABCD” B = “ACD”,返回 true
给出 A = “ABCD” B = “AABC”, 返回 false
题解
1.最简单的暴力解法就不解释了。
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) {
if (B == null)
{
return true;
}
if (B.length() == 0)
{
return A != null;
}
if (A == null || A.length() < B.length())
{
return false;
}
char[] a = A.toCharArray();
char[] b = B.toCharArray();
int index = a.length-1;
for (int j = 0; j < b.length; j++)
{
boolean bFind = false;
for (int i = 0; i <= index; i++)
{
if (b[j] == a[i])
{
char temp = a[index];
a[index] = a[i];
a[i] = temp;
index--;
bFind = true;
break;
}
}
if (!bFind)
{
return false;
}
}
return true;
}
}
2.HashMap的思想,为两个字符串建立两个长度为26的数组,按照A-0,B-1的顺序将字符串的字符全部装入数组,并将数组对应位置的值按个数计数,最后比较两个数组即可,O(n)。
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[] arrA = new int[26];
int[] arrB = new int[26];
for (int i=0;i<A.length();i++)
{
arrA[A.charAt(i)-65]++;
}
for (int j=0;j<B.length();j++)
{
arrB[B.charAt(j)-65]++;
}
for (int k = 0;k<arrB.length;k++)
{
if (arrB[k] != 0 && arrB[k] > arrA[k])
{
return false;
}
}
return true;
}
}
Last Update 2016.8.28