標籤:span nbsp 運算 find 字元 而且 針對 space 排列
方法一:
一種直觀的解是,先對第一個字串排序,然後逐個字元在第二個字串中搜尋,把搜尋不到的字元輸出,就是所要的結果。
然而,演算法庫中有一個集合差運算set_difference,而且要求兩個集合容器是已經排好序的。乍一看,好像是針對集合差運算來的。
1 #include<iostream> 2 #include<fstream> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 ifstream in("remainder.txt"); 9 for (string s,t,u; in >> s >> t;u="")10 {11 sort(s.begin(), s.end());12 sort(t.begin(), t.end());13 set_difference(s.begin(),s.end(),t.begin(),t.end(),back_inserter(u));14 cout << u << endl;15 }16 }
方法二:
然而注意到,對兩個集合分別排序的代價是大的。事實上,t串無需排序,下面的解法,更高效:
1 #include<iostream> 2 #include<fstream> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 ifstream in("remainder.txt"); 9 for (string s,t; in >> s >> t;)10 {11 sort(s.begin(), s.end());12 for (int i = 0; i < s.length();++i)13 if (t.find(s[i]) == string::npos) cout << s[i];14 cout <<endl;15 }16 }
C++ code:剩餘串排列