Advertisement
Guest User

Untitled

a guest
May 29th, 2015
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. class Solution1:
  2. # @param s, a string
  3. # @param p, a string
  4. # @return a boolean
  5. def isMatch(self, s, p):
  6. i = 0
  7. tempP = ""
  8. prev = ""
  9. while i < len(p):
  10. if i < len(p) - 1:
  11. if len(prev) == 0:
  12. if p[i+1] == "*":
  13. prev = p[i] + '*'
  14. tempP += p[i] + '*'
  15. i_inc = 2
  16. else:
  17. prev = p[i]
  18. tempP += p[i]
  19. i_inc = 1
  20. elif p[i] != prev[0] and p[i+1] == "*":
  21. prev = p[i] + '*'
  22. tempP += p[i] + '*'
  23. i_inc = 2
  24. elif p[i] == prev[0] and len(prev) > 1 and prev[1] == "*" and p[i+1] == "*":
  25. i_inc = 2
  26. elif p[i] == prev[0] and len(prev) == 1 and p[i+1] == "*":
  27. prev = p[i] + '*'
  28. tempP += p[i] + '*'
  29. i_inc = 2
  30. elif p[i+1] != '*':
  31. prev = p[i]
  32. tempP += p[i]
  33. i_inc = 1
  34. elif i == len(p) -1:
  35. tempP += p[i]
  36. break
  37. i += i_inc
  38. return self.matchAfterClean(s, tempP)
  39.  
  40.  
  41. def matchAfterClean(self, s, p):
  42. if len(p) == 0 and len(s) == 0:
  43. return True
  44. elif len(s) == 0:
  45. if len(p) > 1 and p[1] == '*':
  46. return self.matchAfterClean(s, p[2:len(p)])
  47. else:
  48. return False
  49. elif len(p) == 0:
  50. return False
  51.  
  52. reg = p[0]
  53. # '.' or not
  54. if reg == '.':
  55. anyone = True
  56. else:
  57. anyone = False
  58.  
  59. # '*' or not
  60. if len(p)>1 and p[1] == '*':
  61. zeroOrMulti = True
  62. else:
  63. zeroOrMulti = False
  64.  
  65.  
  66. if reg == s[0]:
  67. if not zeroOrMulti:
  68. return self.matchAfterClean(s[1:len(s)], p[1:len(p)])
  69. else:
  70. return self.matchAfterClean(s[1:len(s)], p) or self.matchAfterClean(s, p[2:len(p)])
  71. else:
  72. if anyone and not zeroOrMulti:
  73. return self.matchAfterClean(s[1:len(s)], p[1:len(p)])
  74. elif anyone and zeroOrMulti:
  75. return self.matchAfterClean(s[1:len(s)], p) or self.matchAfterClean(s, p[2:len(p)])
  76. elif not anyone and zeroOrMulti:
  77. return self.matchAfterClean(s, p[2:len(p)])
  78. else:
  79. return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement