我想检查string1是否可以通过从string2获取字符并按正确的顺序排列。最有效的方法是什么?
例如,我有2个字符串,如下所示:
string s1 = "ABCDASFSADFAF", s2 ="ABCDFGSAGSRASFSFASFASDADFAFDSAGFAS";
如您所见,我们可以从字符串s2中的字符创建字符串s1,因此string1存在于string2中。所以基本上,我需要检查你是否可以从字符串s2中创建字符串s1。这样做最有效的方法是什么?我有一个想法,通过循环,并检查每个字母在字符串中的次数,然后对第二个字符串执行相同的操作,然后只是将数组与存储的信息进行比较,如果字符串s2字母数组具有更多或相等要串起s1数组字母,那么我们就可以从s2中创建s1。
哦,编程语言是C ++。
答案 0 :(得分:3)
对每个字符串(std::sort
)进行排序,然后使用std::includes
。
答案 1 :(得分: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.