比较字符串

比较两个字符串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);
原文地址:https://www.cnblogs.com/573583868wuy/p/8811259.html