check if a string can be made from characters in another string
我想通过从字符串2中提取字符并按正确的顺序排列来检查是否可以生成字符串1。最有效的方法是什么?
例如,我有两个字符串,如下所示:
1 | string s1 ="ABCDASFSADFAF", s2 ="ABCDFGSAGSRASFSFASFASDADFAFDSAGFAS"; |
如您所见,我们可以从字符串s2中的字符生成字符串s1,因此字符串1存在于字符串2中。所以基本上,我需要检查是否可以从字符串s2生成字符串s1。做这种事最有效的方法是什么?我有一个想法,通过循环,检查每个字母在字符串中的次数,然后对第二个字符串执行相同的操作,然后将数组与存储的信息进行比较,如果字符串s2字母数组中的字符串s1字母多于或等于字符串s1,那么我们就可以从s2生成s1。
编程语言是C++。
对每个字符串(
您可以通过循环遍历s1并从s2的副本中删除每个字符的第一个查找来检查这一点:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <string.h> using namespace std; string s1 ="ABCC", s2 ="DCBA"; string copy = s2; size_t found; bool contains = true; for(int i = 0; i < s1.length(); i++) { found = copy.find(s1[i]); if(found == string::npos) { contains = false; break; } copy = copy.replace(found, 1,""); } // Now 'contains' is true if s1 can be made from s2, false if it can't. // If also 'copy' is empty, s1 is an anagram of s2. |