2012-02-23 118 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

相關問題