2012-02-23 123 views
-1

我想检查string1是否可以通过从string2中获取字符并将其放入正确的顺序来制作。什么是最有效的方法呢?检查是否可以从另一个字符串中的字符中创建一个字符串

例如,我有2个字符串,如下图所示:

string s1 = "ABCDASFSADFAF", s2 ="ABCDFGSAGSRASFSFASFASDADFAFDSAGFAS"; 

,你可以看到,我们可以从字符串s2的字符组成的字符串S1,所以字符串1包含字符串存在。所以基本上,我需要检查是否可以从字符串s2创建字符串s1。什么是最有效的方式来做这样的事情?我有一个想法,通过循环,检查每个字母在字符串中的次数,然后对第二个字符串进行相同的操作,然后将数组与存储的信息进行比较,如果字符串s2的字母数组具有更多或相等将字符串s1排列,然后我们可以从s2中生成s1。

哦,编程语言是C++。

回答

0

您可以通过S1循环和S2的副本删除每个字符的第一个发现检查此:

#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. 
3

排序每个字符串(std::sort),然后使用std::includes

相关问题