• C++ code:剩余串排列


    方法一:

    一种直观的解是,先对第一个字串排序,然后逐个字符在第二个字串中搜索,把搜索不到的字符输出,就是所要的结果。

    然而,算法库中有一个集合差运算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 }

  • 相关阅读:
    acm课程练习2--1005
    acm课程练习2--1003
    [ZJOI2010]网络扩容
    [ZJOI2009]狼和羊的故事
    [FJOI2007]轮状病毒
    [NOIP2016提高组]换教室
    [NOIP2016提高组]愤怒的小鸟
    [NOIP2009提高组]最优贸易
    [洛谷P2245]星际导航
    [NOIP2013提高组]货车运输
  • 原文地址:https://www.cnblogs.com/ariel-dreamland/p/9092065.html
Copyright © 2020-2023  润新知