fork(2) download
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. bool check(const string &s1, const string &s2, int &minToDelete)
  6. {
  7. minToDelete = 0;
  8. bool anySubSeqFound = false;
  9.  
  10. if (s2.empty())
  11. return false;
  12.  
  13. string::size_type first = 0;
  14. while ((first = s1.find(s2[0], first)) != string::npos)
  15. {
  16. int numDeleted = 0;
  17. bool isSubSeq = true;
  18.  
  19. string::size_type next = first + 1;
  20. for(string::size_type j = 1; j < s2.size(); ++j)
  21. {
  22. string::size_type found = s1.find(s2[j], next);
  23. if (found == string::npos)
  24. {
  25. isSubSeq = false;
  26. break;
  27. }
  28. numDeleted += (found - next);
  29. next = found + 1;
  30. }
  31.  
  32. if (isSubSeq)
  33. {
  34. if (anySubSeqFound)
  35. {
  36. if (numDeleted < minToDelete)
  37. minToDelete = numDeleted;
  38. }
  39. else
  40. {
  41. anySubSeqFound = true;
  42. minToDelete = numDeleted;
  43. }
  44. }
  45.  
  46. ++first;
  47. }
  48.  
  49. return anySubSeqFound;
  50. }
  51.  
  52. int main()
  53. {
  54. int minToDelete;
  55.  
  56. if (check("thistext", "text", minToDelete))
  57. cout << "yes, delete " << minToDelete << endl;
  58. else
  59. cout << "no" << endl;
  60.  
  61. if (check("cutefriendship", "crisp", minToDelete))
  62. cout << "yes, delete " << minToDelete << endl;
  63. else
  64. cout << "no" << endl;
  65. }
Success #stdin #stdout 0s 4528KB
stdin
Standard input is empty
stdout
yes, delete 0
yes, delete 9