Guest User

Untitled

a guest
Jan 21st, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. # Enter your code here. Read input from STDIN. Print output to STDOUT
  2. N = gets.to_i
  3. words = []
  4.  
  5. while words.length < N do
  6. words << gets.sub(/\n$/, '').strip
  7. end
  8.  
  9. words.each do |word|
  10. count = 0
  11. (word.length).times do |i|
  12. sub = word[i..-1]
  13. j=0
  14. while j < sub.length && sub[j] == word[j] do
  15. count += 1
  16. j+=1
  17. end
  18. end
  19. puts count
  20. end
  21.  
  22. def zarray(str):
  23. Z = [0]*len(str)
  24. Z[0] = len(str)
  25. left, right, i = 0, 0, 1
  26. while i < len(str):
  27. if i > right:
  28. j, k = 0, i
  29. while k < len(str) and str[j] == str[k]:
  30. j += 1
  31. k += 1
  32. Z[i] = j
  33. if j > 0:
  34. left, right = i, i+j-1
  35. else:
  36. z = Z[i-left]
  37. s = right-i+1
  38. if z < s:
  39. Z[i] = z
  40. else:
  41. j, k = s, s+i
  42. while k < len(str) and str[j] == str[k]:
  43. j += 1
  44. k += 1
  45. Z[i] = j
  46. left, right = i, i+j-1
  47. i += 1
  48. return Z
  49.  
  50. def similarity(s):
  51. return sum(zarray(s))
  52.  
  53. S[i + Z[i-left]] = S[i-left + Z[i-left]] ≠ S[Z[i-left]]
  54. S[i + k] = S[i-left + k] = S[k] for 0 <= k < Z[i-left]
Add Comment
Please, Sign In to add comment