比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是大写字母
样例
给出 A = "ABCD"
B = "ACD"
,返回 true
给出 A = "ABCD"
B = "AABC"
, 返回 false
注意
在 A 中出现的 B 字符串里的字符不需要连续或者有序。
1 <?php 2 /** 3 * 比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是大写字母 4 */ 5 6 /** 7 * 复杂解法: 8 * 1.将两字符串s, sub转换为字符数组,并对字符数组进行排序,得到有序的字符数组; 9 * 2.利用两根指针查找两字符数组中相同的字符,并记录相同字符的长度为length; 若长度length与字符串sub的长度相等,则返回true, 否则返回false; 10 */ 11 12 /** 13 * 简单解法:($s:主串 $sub:子串 返回true/false) 14 * 思路: 15 * 1.大写字母只有26个; 16 * 2.定义一个,以A-Z为key值的数组$arr,初始值均为0; 17 * 3.循环字符串s, $arr[$s[$i]]++; 18 * 4.循环字符串sub, $arr[$sub[$i]]--; 如果$arr[$sub[$i]]<0, 退出循环返回false, 否则返回true; 19 */ 20 function comparision($s, $sub) 21 { 22 $len1 = strlen($s); 23 $len2 = strlen($sub); 24 25 if(0 == $len1 || 0 == $len2 || $len1 < $len2) 26 { 27 return false; 28 } 29 30 $key = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']; 31 $arr = array_fill_keys($key, 0); 32 for($i=0; $i<$len1; ++$i) 33 { 34 $arr[$s[$i]]++; 35 } 36 37 for($i=0; $i<$len2; ++$i) 38 { 39 $arr[$sub[$i]]--; 40 if($arr[$sub[$i]] < 0) 41 { 42 return false; 43 } 44 } 45 46 return true; 47 } 48 //存在 49 $s1 = "ABCD"; 50 $s2 = "ACD"; 51 $res = comparision($s1, $s2); 52 var_dump($res); 53 //不存在 54 $s1 = "ABCD"; 55 $s2 = "ACDE"; 56 $res = comparision($s1, $s2); 57 var_dump($res);