Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. class Solution {
  2. public:
  3. int minMutation(string start, string end, vector<string>& bank) {
  4. //>> transform bank to hash map
  5. unordered_set<string> bankSet;
  6. for(const auto &g : bank) {
  7. bankSet.insert(g);
  8. }
  9.  
  10. //>> prepare two sets. one is from head and the other is from end
  11. unordered_set<string> headSet, tailSet, *smallerSetPtr, *biggerSetPtr;
  12. headSet.insert(start);
  13.  
  14. //>> check end is reachable or not
  15. if(bankSet.find(end) != bankSet.end()) {
  16. tailSet.insert(end);
  17. }
  18.  
  19. int step = 0;
  20. const int len = start.length();
  21.  
  22. while(!headSet.empty() && !tailSet.empty()) {
  23. ++step;
  24.  
  25. smallerSetPtr = (headSet.size() < tailSet.size()) ? &headSet : &tailSet;
  26. biggerSetPtr = (headSet.size() < tailSet.size()) ? &tailSet : &headSet;
  27.  
  28. unordered_set<string> nextReachableSet;
  29.  
  30. for(const auto &gene : *smallerSetPtr) {
  31. for(int i = 0; i < len; i++) {
  32. string newGene = gene;
  33. for(int j = 0; j < 4; j++) {
  34. char ch;
  35. switch(j) {
  36. case 0:
  37. ch = 'A';
  38. break;
  39. case 1:
  40. ch = 'C';
  41. break;
  42. case 2:
  43. ch = 'G';
  44. break;
  45. case 3:
  46. ch = 'T';
  47. break;
  48. }
  49.  
  50. newGene[i] = ch;
  51.  
  52. //>> find ans
  53. if(biggerSetPtr->find(newGene) != biggerSetPtr->end()) {
  54. return step;
  55. }
  56.  
  57. //>> find valid next step
  58. if(bankSet.find(newGene) != bankSet.end()) {
  59. nextReachableSet.insert(newGene);
  60. bankSet.erase(newGene);
  61. }
  62. }
  63. }
  64. }
  65.  
  66. //>> change smallerSet to nextReachableSet
  67. swap(*smallerSetPtr, nextReachableSet);
  68. }
  69.  
  70. return -1;
  71. }
  72. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement