Advertisement
Guest User

Untitled

a guest
Sep 26th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. #include <iostream>
  2. #include <set>
  3. #include <map>
  4. #include <string>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. vector<vector<string> > _segmentString(const string& inputString, set<string>& wordList, map<string, vector<vector<string> > >& cacheMap) {
  10. auto targetCache = cacheMap.find(inputString);
  11. if (targetCache != cacheMap.end()) {
  12. return targetCache->second;
  13. }
  14. auto retVector = vector<vector<string> >();
  15.  
  16. if (inputString.size() <= 1) {
  17. auto vec = vector<string>();
  18. vec.push_back(inputString);
  19. retVector.push_back(vec);
  20. } else {
  21. for (int i = 1; i <= inputString.size(); i++) {
  22. auto frontSubString = inputString.substr(0, i);
  23. if (wordList.find(frontSubString) != wordList.end()) {
  24. auto backSubString = inputString.substr(i, inputString.size());
  25. if (backSubString.size()) {
  26. auto backSegments = _segmentString(backSubString, wordList, cacheMap);
  27. for (auto iter = backSegments.begin(); iter != backSegments.end(); ++iter) {
  28. auto vec = vector<string>(*iter);
  29. vec.insert(vec.begin(), frontSubString);
  30. retVector.push_back(vec);
  31. }
  32. } else {
  33. auto vec = vector<string>();
  34. vec.push_back(frontSubString);
  35. retVector.push_back(vec);
  36. }
  37. }
  38. }
  39. }
  40. cacheMap.insert(pair<string, vector<vector<string> > >(inputString, retVector));
  41.  
  42. return retVector;
  43. }
  44.  
  45. vector<vector<string> > segmentString(const string& inputString, set<string>& wordList) {
  46. auto cacheMap = map<string, vector<vector<string> > >();
  47. return _segmentString(inputString, wordList, cacheMap);
  48. }
  49.  
  50. int main() {
  51. string aaa = "nimenhao";
  52. //nimenhao
  53. auto wordlist = set<string>();
  54. for (char c = 'a'; c <= 'z'; ++c) {
  55. wordlist.insert(string(1, c));
  56. }
  57. string l[] = {"ni", "me", "men", "ha", "hao", "ao"};
  58. for (auto i = 0; i < sizeof(l) / sizeof(string); i++) {
  59. wordlist.insert(l[i]);
  60. }
  61. auto segResult = segmentString(aaa, wordlist);
  62. for (auto iter = segResult.begin(); iter != segResult.end(); ++iter) {
  63. auto& row = *iter;
  64. for (auto innerIter = row.begin(); innerIter != row.end(); ++innerIter) {
  65. if (innerIter != row.begin()) {
  66. cout << '|';
  67. }
  68. cout << '(' << *innerIter << ')';
  69. }
  70.  
  71. cout << endl;
  72. }
  73.  
  74. return 0;
  75. }
  76.  
  77. /*
  78. *
  79. * Result Will Be
  80. (n)|(i)|(m)|(e)|(n)|(h)|(a)|(o)
  81. (n)|(i)|(m)|(e)|(n)|(h)|(ao)
  82. (n)|(i)|(m)|(e)|(n)|(ha)|(o)
  83. (n)|(i)|(m)|(e)|(n)|(hao)
  84. (n)|(i)|(me)|(n)|(h)|(a)|(o)
  85. (n)|(i)|(me)|(n)|(h)|(ao)
  86. (n)|(i)|(me)|(n)|(ha)|(o)
  87. (n)|(i)|(me)|(n)|(hao)
  88. (n)|(i)|(men)|(h)|(a)|(o)
  89. (n)|(i)|(men)|(h)|(ao)
  90. (n)|(i)|(men)|(ha)|(o)
  91. (n)|(i)|(men)|(hao)
  92. (ni)|(m)|(e)|(n)|(h)|(a)|(o)
  93. (ni)|(m)|(e)|(n)|(h)|(ao)
  94. (ni)|(m)|(e)|(n)|(ha)|(o)
  95. (ni)|(m)|(e)|(n)|(hao)
  96. (ni)|(me)|(n)|(h)|(a)|(o)
  97. (ni)|(me)|(n)|(h)|(ao)
  98. (ni)|(me)|(n)|(ha)|(o)
  99. (ni)|(me)|(n)|(hao)
  100. (ni)|(men)|(h)|(a)|(o)
  101. (ni)|(men)|(h)|(ao)
  102. (ni)|(men)|(ha)|(o)
  103. (ni)|(men)|(hao)
  104. *
  105. * */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement