leetcode-py-sdk 0.44.0__tar.gz → 0.45.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/PKG-INFO +1 -1
  2. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/pyproject.toml +1 -1
  3. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/copy_list_with_random_pointer.json +91 -0
  4. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/distinct_subsequences.json +90 -0
  5. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/edit_distance.json +89 -0
  6. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/interleaving_string.json +96 -0
  7. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/n_queens.json +90 -0
  8. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/plus_one.json +92 -0
  9. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/search_a_2d_matrix.json +91 -0
  10. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/single_number.json +91 -0
  11. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/subsets_ii.json +88 -0
  12. leetcode_py_sdk-0.45.0/src/leetcode_py/cli/resources/leetcode/json/problems/surrounded_regions.json +89 -0
  13. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/tags.json5 +10 -0
  14. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/README.md +0 -0
  15. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/__init__.py +0 -0
  16. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/__init__.py +0 -0
  17. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/__init__.py +0 -0
  18. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/gen.py +0 -0
  19. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/list.py +0 -0
  20. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/commands/scrape.py +0 -0
  21. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/main.py +0 -0
  22. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/cookiecutter.json +0 -0
  23. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/accounts_merge.json +0 -0
  24. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/add_binary.json +0 -0
  25. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/add_two_numbers.json +0 -0
  26. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/alien_dictionary.json +0 -0
  27. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/balanced_binary_tree.json +0 -0
  28. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/basic_calculator.json +0 -0
  29. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/best_time_to_buy_and_sell_stock.json +0 -0
  30. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_search.json +0 -0
  31. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_inorder_traversal.json +0 -0
  32. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_level_order_traversal.json +0 -0
  33. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_maximum_path_sum.json +0 -0
  34. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_postorder_traversal.json +0 -0
  35. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_preorder_traversal.json +0 -0
  36. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/binary_tree_right_side_view.json +0 -0
  37. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/cheapest_flights_within_k_stops.json +0 -0
  38. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/climbing_stairs.json +0 -0
  39. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/clone_graph.json +0 -0
  40. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/coin_change.json +0 -0
  41. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum.json +0 -0
  42. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/combination_sum_ii.json +0 -0
  43. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/construct_binary_tree_from_preorder_and_inorder_traversal.json +0 -0
  44. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/container_with_most_water.json +0 -0
  45. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/contains_duplicate.json +0 -0
  46. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/contiguous_array.json +0 -0
  47. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/counting_bits.json +0 -0
  48. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule.json +0 -0
  49. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/course_schedule_ii.json +0 -0
  50. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/daily_temperatures.json +0 -0
  51. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_string.json +0 -0
  52. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/decode_ways.json +0 -0
  53. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/design_add_and_search_words_data_structure.json +0 -0
  54. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/design_in_memory_file_system.json +0 -0
  55. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/diagonal_traverse.json +0 -0
  56. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/diameter_of_binary_tree.json +0 -0
  57. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/encode_and_decode_strings.json +0 -0
  58. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/evaluate_reverse_polish_notation.json +0 -0
  59. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_all_anagrams_in_a_string.json +0 -0
  60. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_first_and_last_position_of_element_in_sorted_array.json +0 -0
  61. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_k_closest_elements.json +0 -0
  62. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_median_from_data_stream.json +0 -0
  63. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_minimum_in_rotated_sorted_array.json +0 -0
  64. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/find_the_duplicate_number.json +0 -0
  65. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/first_bad_version.json +0 -0
  66. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/first_missing_positive.json +0 -0
  67. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/flood_fill.json +0 -0
  68. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/gas_station.json +0 -0
  69. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/generate_parentheses.json +0 -0
  70. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/graph_valid_tree.json +0 -0
  71. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/group_anagrams.json +0 -0
  72. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber.json +0 -0
  73. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/house_robber_ii.json +0 -0
  74. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_queue_using_stacks.json +0 -0
  75. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/implement_trie_prefix_tree.json +0 -0
  76. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/insert_interval.json +0 -0
  77. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/invert_binary_tree.json +0 -0
  78. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/is_graph_bipartite.json +0 -0
  79. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/is_subsequence.json +0 -0
  80. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game.json +0 -0
  81. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/jump_game_ii.json +0 -0
  82. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/k_closest_points_to_origin.json +0 -0
  83. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/kth_smallest_element_in_a_bst.json +0 -0
  84. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/largest_rectangle_in_histogram.json +0 -0
  85. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/letter_combinations_of_a_phone_number.json +0 -0
  86. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle.json +0 -0
  87. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/linked_list_cycle_ii.json +0 -0
  88. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_common_subsequence.json +0 -0
  89. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_consecutive_sequence.json +0 -0
  90. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_path_in_a_matrix.json +0 -0
  91. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_increasing_subsequence.json +0 -0
  92. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindrome.json +0 -0
  93. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_palindromic_substring.json +0 -0
  94. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_repeating_character_replacement.json +0 -0
  95. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/longest_substring_without_repeating_characters.json +0 -0
  96. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_search_tree.json +0 -0
  97. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lowest_common_ancestor_of_a_binary_tree.json +0 -0
  98. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/lru_cache.json +0 -0
  99. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/majority_element.json +0 -0
  100. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/max_points_on_a_line.json +0 -0
  101. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_depth_of_binary_tree.json +0 -0
  102. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_product_subarray.json +0 -0
  103. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_profit_in_job_scheduling.json +0 -0
  104. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_subarray.json +0 -0
  105. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/maximum_width_of_binary_tree.json +0 -0
  106. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/median_of_two_sorted_arrays.json +0 -0
  107. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms.json +0 -0
  108. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/meeting_rooms_ii.json +0 -0
  109. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_intervals.json +0 -0
  110. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_k_sorted_lists.json +0 -0
  111. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/merge_two_sorted_lists.json +0 -0
  112. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/middle_of_the_linked_list.json +0 -0
  113. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/min_cost_to_connect_all_points.json +0 -0
  114. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/min_stack.json +0 -0
  115. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_height_trees.json +0 -0
  116. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_path_sum.json +0 -0
  117. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/minimum_window_substring.json +0 -0
  118. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/missing_number.json +0 -0
  119. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/multiply_strings.json +0 -0
  120. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/my_calendar_i.json +0 -0
  121. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/next_permutation.json +0 -0
  122. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/non_overlapping_intervals.json +0 -0
  123. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_1_bits.json +0 -0
  124. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_connected_components_in_an_undirected_graph.json +0 -0
  125. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_islands.json +0 -0
  126. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/number_of_provinces.json +0 -0
  127. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/odd_even_linked_list.json +0 -0
  128. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/pacific_atlantic_water_flow.json +0 -0
  129. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/palindrome_partitioning.json +0 -0
  130. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/palindromic_substrings.json +0 -0
  131. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/partition_equal_subset_sum.json +0 -0
  132. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_ii.json +0 -0
  133. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/path_sum_iii.json +0 -0
  134. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/permutation_in_string.json +0 -0
  135. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/permutations.json +0 -0
  136. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/powx_n.json +0 -0
  137. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/product_of_array_except_self.json +0 -0
  138. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/ransom_note.json +0 -0
  139. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/regular_expression_matching.json +0 -0
  140. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/remove_nth_node_from_end_of_list.json +0 -0
  141. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reorder_list.json +0 -0
  142. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_bits.json +0 -0
  143. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_integer.json +0 -0
  144. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list.json +0 -0
  145. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_linked_list_ii.json +0 -0
  146. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_nodes_in_k_group.json +0 -0
  147. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/reverse_words_in_a_string.json +0 -0
  148. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_array.json +0 -0
  149. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotate_image.json +0 -0
  150. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/rotting_oranges.json +0 -0
  151. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/same_tree.json +0 -0
  152. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/search_in_rotated_sorted_array.json +0 -0
  153. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/serialize_and_deserialize_binary_tree.json +0 -0
  154. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/set_matrix_zeroes.json +0 -0
  155. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/single_number_iii.json +0 -0
  156. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sliding_window_maximum.json +0 -0
  157. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sort_colors.json +0 -0
  158. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/spiral_matrix.json +0 -0
  159. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/string_to_integer_atoi.json +0 -0
  160. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subarray_sum_equals_k.json +0 -0
  161. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subsets.json +0 -0
  162. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/subtree_of_another_tree.json +0 -0
  163. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/sum_of_two_integers.json +0 -0
  164. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/swap_nodes_in_pairs.json +0 -0
  165. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/task_scheduler.json +0 -0
  166. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/three_sum.json +0 -0
  167. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/time_based_key_value_store.json +0 -0
  168. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_elements.json +0 -0
  169. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/top_k_frequent_words.json +0 -0
  170. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/trapping_rain_water.json +0 -0
  171. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/two_sum.json +0 -0
  172. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/unique_paths.json +0 -0
  173. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_anagram.json +0 -0
  174. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_palindrome.json +0 -0
  175. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_parentheses.json +0 -0
  176. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/valid_sudoku.json +0 -0
  177. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/validate_binary_search_tree.json +0 -0
  178. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_break.json +0 -0
  179. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_ladder.json +0 -0
  180. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search.json +0 -0
  181. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/word_search_ii.json +0 -0
  182. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/json/problems/zero_one_matrix.json +0 -0
  183. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/README.md +0 -0
  184. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/__init__.py +0 -0
  185. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/helpers.py +0 -0
  186. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/playground.ipynb +0 -0
  187. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/solution.py +0 -0
  188. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/resources/leetcode/{{cookiecutter.problem_name}}/test_solution.py +0 -0
  189. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/__init__.py +0 -0
  190. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/problem_finder.py +0 -0
  191. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/resources.py +0 -0
  192. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/cli/utils/tag_helpers.py +0 -0
  193. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/__init__.py +0 -0
  194. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/_utils.py +0 -0
  195. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/dict_tree.py +0 -0
  196. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/doubly_list_node.py +0 -0
  197. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/graph_node.py +0 -0
  198. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/list_node.py +0 -0
  199. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/data_structures/tree_node.py +0 -0
  200. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/py.typed +0 -0
  201. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/__init__.py +0 -0
  202. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/check_test_cases.py +0 -0
  203. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/generator.py +0 -0
  204. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/logged_test.py +0 -0
  205. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/parser.py +0 -0
  206. {leetcode_py_sdk-0.44.0 → leetcode_py_sdk-0.45.0}/src/leetcode_py/tools/scraper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: leetcode-py-sdk
3
- Version: 0.44.0
3
+ Version: 0.45.0
4
4
  Summary: Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing
5
5
  Keywords: algorithms,coding-practice,data-structures,interview-prep,leetcode
6
6
  Author: Wisaroot Lertthaweedech
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "leetcode-py-sdk"
3
- version = "0.44.0" # use git tag instead
3
+ version = "0.45.0" # use git tag instead
4
4
  description = "Modern Python LeetCode practice environment with automated problem generation, beautiful data structure visualizations, and comprehensive testing"
5
5
  authors = [
6
6
  {name = "Wisaroot Lertthaweedech", email = "l.wisaroot@gmail.com"}
@@ -0,0 +1,91 @@
1
+ {
2
+ "problem_name": "copy_list_with_random_pointer",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "138",
5
+ "problem_title": "Copy List with Random Pointer",
6
+ "difficulty": "Medium",
7
+ "topics": "Hash Table, Linked List",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "A linked list of length `n` is given such that each node contains an additional **random pointer**, which could point to any node in the list, or `null`.\n\nConstruct a [**deep copy**](https://en.wikipedia.org/wiki/Object_copying#Deep_copy) of the list. The deep copy should consist of exactly `n` **brand new** nodes, where each new node has its value set to the value of its corresponding original node. Both the `next` and `random` pointer of the new nodes should point to new nodes in the copied list such that the pointers in the original list and copied list represent the same list state. **None of the pointers in the new list should point to nodes in the original list**.\n\nReturn *the head of the copied linked list*.\n\nThe linked list is represented in the input/output as a list of `n` nodes. Each node is represented as a pair of `[val, random_index]` where:\n\n- `val`: an integer representing `Node.val`\n- `random_index`: the index of the node (range from `0` to `n-1`) that the `random` pointer points to, or `null` if it does not point to any node.",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "![Example 1](https://assets.leetcode.com/uploads/2019/12/18/e1.png)\n\n```\nInput: head = [[7,null],[13,0],[11,4],[10,2],[1,0]]\nOutput: [[7,null],[13,0],[11,4],[10,2],[1,0]]\n```"
16
+ },
17
+ {
18
+ "content": "![Example 2](https://assets.leetcode.com/uploads/2019/12/18/e2.png)\n\n```\nInput: head = [[1,1],[2,1]]\nOutput: [[1,1],[2,1]]\n```"
19
+ },
20
+ {
21
+ "content": "![Example 3](https://assets.leetcode.com/uploads/2019/12/18/e3.png)\n\n```\nInput: head = [[3,null],[3,0],[3,null]]\nOutput: [[3,null],[3,0],[3,null]]\n```"
22
+ }
23
+ ]
24
+ },
25
+ "readme_constraints": "- 0 <= n <= 1000\n- -10^4 <= Node.val <= 10^4\n- Node.random is null or points to some node in the linked list.",
26
+ "readme_additional": "",
27
+ "helpers_imports": "from .solution import Node",
28
+ "helpers_content": "def _build_random_list(nodes: list[list[int | None]]) -> Node | None:\n if not nodes:\n return None\n created: list[Node] = []\n for node_spec in nodes:\n val = node_spec[0]\n assert isinstance(val, int)\n created.append(Node(val))\n for i, node_spec in enumerate(nodes):\n if i + 1 < len(created):\n created[i].next = created[i + 1]\n rand_idx = node_spec[1]\n if rand_idx is not None:\n created[i].random = created[rand_idx]\n return created[0]\n\n\ndef _serialize_random_list(head: Node | None) -> list[list[int | None]]:\n index_by_id: dict[int, int] = {}\n cur: Node | None = head\n i = 0\n while cur is not None:\n index_by_id[id(cur)] = i\n i += 1\n cur = cur.next\n result: list[list[int | None]] = []\n cur = head\n while cur is not None:\n rand_idx = index_by_id[id(cur.random)] if cur.random is not None else None\n result.append([cur.val, rand_idx])\n cur = cur.next\n return result",
29
+ "helpers_run_name": "copy_random_list",
30
+ "helpers_run_signature": "(solution_class: type, nodes: list[list[int | None]])",
31
+ "helpers_run_body": " implementation = solution_class()\n head = _build_random_list(nodes)\n copied = implementation.copy_random_list(head)\n return _serialize_random_list(copied)",
32
+ "helpers_assert_name": "copy_random_list",
33
+ "helpers_assert_signature": "(result: list[list[int | None]], expected: list[list[int | None]]) -> bool",
34
+ "helpers_assert_body": " assert result == expected\n return True",
35
+ "solution_imports": "from __future__ import annotations",
36
+ "solution_contents": "class Node:\n def __init__(self, x: int, next: Node | None = None, random: Node | None = None):\n self.val = int(x)\n self.next = next\n self.random = random\n\n\n",
37
+ "solution_class_content": "",
38
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_copy_random_list, run_copy_random_list\nfrom .solution import Solution",
39
+ "test_content": "",
40
+ "test_class_name": "CopyListWithRandomPointer",
41
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
42
+ "_solution_methods": {
43
+ "list": [
44
+ {
45
+ "name": "copy_random_list",
46
+ "signature": "(self, head: Node | None) -> Node | None",
47
+ "body": " # TODO: Implement copy_random_list\n return None"
48
+ }
49
+ ]
50
+ },
51
+ "_test_helper_methods": {
52
+ "list": [
53
+ {
54
+ "name": "setup_method",
55
+ "parameters": "",
56
+ "body": "self.solution = Solution()"
57
+ }
58
+ ]
59
+ },
60
+ "_test_methods": {
61
+ "list": [
62
+ {
63
+ "name": "test_copy_random_list",
64
+ "signature": "(self, nodes: list[list[int | None]], expected: list[list[int | None]])",
65
+ "parametrize": "nodes, expected",
66
+ "test_cases": {
67
+ "list": [
68
+ "([[7, None], [13, 0], [11, 4], [10, 2], [1, 0]], [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]])",
69
+ "([[1, 1], [2, 1]], [[1, 1], [2, 1]])",
70
+ "([[3, None], [3, 0], [3, None]], [[3, None], [3, 0], [3, None]])",
71
+ "([], [])",
72
+ "([[1, None]], [[1, None]])",
73
+ "([[1, 0]], [[1, 0]])",
74
+ "([[1, None], [2, None]], [[1, None], [2, None]])",
75
+ "([[5, 1], [6, None], [7, 0]], [[5, 1], [6, None], [7, 0]])",
76
+ "([[0, None], [1, 0], [2, 1], [3, 2]], [[0, None], [1, 0], [2, 1], [3, 2]])",
77
+ "([[1, None], [2, 2], [3, 2]], [[1, None], [2, 2], [3, 2]])",
78
+ "([[42, None]], [[42, None]])",
79
+ "([[1, 2], [2, None], [3, 0]], [[1, 2], [2, None], [3, 0]])",
80
+ "([[1, None], [2, 0], [3, 1], [4, 2]], [[1, None], [2, 0], [3, 1], [4, 2]])"
81
+ ]
82
+ },
83
+ "body": " result = run_copy_random_list(Solution, nodes)\n assert_copy_random_list(result, expected)"
84
+ }
85
+ ]
86
+ },
87
+ "playground_imports": "from helpers import run_copy_random_list, assert_copy_random_list\nfrom solution import Node, Solution",
88
+ "playground_setup": "# Example test case (each node is [val, random_index])\nnodes = [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]]\nexpected = [[7, None], [13, 0], [11, 4], [10, 2], [1, 0]]",
89
+ "playground_run": "result = run_copy_random_list(Solution, nodes)\nresult",
90
+ "playground_assert": "assert_copy_random_list(result, expected)"
91
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "problem_name": "distinct_subsequences",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "115",
5
+ "problem_title": "Distinct Subsequences",
6
+ "difficulty": "Hard",
7
+ "topics": "String, Dynamic Programming",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "Given two strings `s` and `t`, return *the number of distinct subsequences of* `s` *which equals* `t`.\n\nThe test cases are generated so that the answer fits on a **32-bit** signed integer.",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "```\nInput: s = \"rabbbit\", t = \"rabbit\"\nOutput: 3\nExplanation:\nAs shown below, there are 3 ways you can generate \"rabbit\" from s.\nrabbbit\nrabbbit\nrabbbit\n```"
16
+ },
17
+ {
18
+ "content": "```\nInput: s = \"babgbag\", t = \"bag\"\nOutput: 5\nExplanation:\nAs shown below, there are 5 ways you can generate \"bag\" from s.\nbabgbag\nbabgbag\nbabgbag\nbabgbag\nbabgbag\n```"
19
+ }
20
+ ]
21
+ },
22
+ "readme_constraints": "- 1 <= s.length, t.length <= 1000\n- s and t consist of English letters.",
23
+ "readme_additional": "",
24
+ "helpers_imports": "",
25
+ "helpers_content": "",
26
+ "helpers_run_name": "num_distinct",
27
+ "helpers_run_signature": "(solution_class: type, s: str, t: str)",
28
+ "helpers_run_body": " implementation = solution_class()\n return implementation.num_distinct(s, t)",
29
+ "helpers_assert_name": "num_distinct",
30
+ "helpers_assert_signature": "(result: int, expected: int) -> bool",
31
+ "helpers_assert_body": " assert result == expected\n return True",
32
+ "solution_imports": "",
33
+ "solution_contents": "",
34
+ "solution_class_content": "",
35
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_num_distinct, run_num_distinct\nfrom .solution import Solution",
36
+ "test_content": "",
37
+ "test_class_name": "DistinctSubsequences",
38
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
39
+ "_solution_methods": {
40
+ "list": [
41
+ {
42
+ "name": "num_distinct",
43
+ "signature": "(self, s: str, t: str) -> int",
44
+ "body": " # TODO: Implement num_distinct\n return 0"
45
+ }
46
+ ]
47
+ },
48
+ "_test_helper_methods": {
49
+ "list": [
50
+ {
51
+ "name": "setup_method",
52
+ "parameters": "",
53
+ "body": "self.solution = Solution()"
54
+ }
55
+ ]
56
+ },
57
+ "_test_methods": {
58
+ "list": [
59
+ {
60
+ "name": "test_num_distinct",
61
+ "signature": "(self, s: str, t: str, expected: int)",
62
+ "parametrize": "s, t, expected",
63
+ "test_cases": {
64
+ "list": [
65
+ "('rabbbit', 'rabbit', 3)",
66
+ "('babgbag', 'bag', 5)",
67
+ "('a', 'a', 1)",
68
+ "('a', 'b', 0)",
69
+ "('aaa', 'a', 3)",
70
+ "('aaa', 'aa', 3)",
71
+ "('aaaa', 'aa', 6)",
72
+ "('abc', 'abc', 1)",
73
+ "('abc', 'abcd', 0)",
74
+ "('abab', 'ab', 3)",
75
+ "('abab', 'bab', 1)",
76
+ "('abcabc', 'abc', 4)",
77
+ "('dddd', 'dd', 6)",
78
+ "('aab', 'ab', 2)",
79
+ "('bbb', 'bb', 3)"
80
+ ]
81
+ },
82
+ "body": " result = run_num_distinct(Solution, s, t)\n assert_num_distinct(result, expected)"
83
+ }
84
+ ]
85
+ },
86
+ "playground_imports": "from helpers import run_num_distinct, assert_num_distinct\nfrom solution import Solution",
87
+ "playground_setup": "# Example test case\ns = 'rabbbit'\nt = 'rabbit'\nexpected = 3",
88
+ "playground_run": "result = run_num_distinct(Solution, s, t)\nresult",
89
+ "playground_assert": "assert_num_distinct(result, expected)"
90
+ }
@@ -0,0 +1,89 @@
1
+ {
2
+ "problem_name": "edit_distance",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "72",
5
+ "problem_title": "Edit Distance",
6
+ "difficulty": "Hard",
7
+ "topics": "String, Dynamic Programming",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "Given two strings `word1` and `word2`, return *the minimum number of operations required to convert* `word1` *to* `word2`.\n\nYou have the following three operations permitted on a word:\n\n- Insert a character\n- Delete a character\n- Replace a character",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "```\nInput: word1 = \"horse\", word2 = \"ros\"\nOutput: 3\nExplanation:\nhorse -> rorse (replace 'h' with 'r')\nrorse -> rose (remove 'r')\nrose -> ros (remove 'e')\n```"
16
+ },
17
+ {
18
+ "content": "```\nInput: word1 = \"intention\", word2 = \"execution\"\nOutput: 5\nExplanation:\nintention -> inention (remove 't')\ninention -> enention (replace 'i' with 'e')\nenention -> exention (replace 'n' with 'x')\nexention -> exection (replace 'n' with 'c')\nexection -> execution (insert 'u')\n```"
19
+ }
20
+ ]
21
+ },
22
+ "readme_constraints": "- 0 <= word1.length, word2.length <= 500\n- word1 and word2 consist of lowercase English letters.",
23
+ "readme_additional": "",
24
+ "helpers_imports": "",
25
+ "helpers_content": "",
26
+ "helpers_run_name": "min_distance",
27
+ "helpers_run_signature": "(solution_class: type, word1: str, word2: str)",
28
+ "helpers_run_body": " implementation = solution_class()\n return implementation.min_distance(word1, word2)",
29
+ "helpers_assert_name": "min_distance",
30
+ "helpers_assert_signature": "(result: int, expected: int) -> bool",
31
+ "helpers_assert_body": " assert result == expected\n return True",
32
+ "solution_imports": "",
33
+ "solution_contents": "",
34
+ "solution_class_content": "",
35
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_min_distance, run_min_distance\nfrom .solution import Solution",
36
+ "test_content": "",
37
+ "test_class_name": "EditDistance",
38
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
39
+ "_solution_methods": {
40
+ "list": [
41
+ {
42
+ "name": "min_distance",
43
+ "signature": "(self, word1: str, word2: str) -> int",
44
+ "body": " # TODO: Implement min_distance\n return 0"
45
+ }
46
+ ]
47
+ },
48
+ "_test_helper_methods": {
49
+ "list": [
50
+ {
51
+ "name": "setup_method",
52
+ "parameters": "",
53
+ "body": "self.solution = Solution()"
54
+ }
55
+ ]
56
+ },
57
+ "_test_methods": {
58
+ "list": [
59
+ {
60
+ "name": "test_min_distance",
61
+ "signature": "(self, word1: str, word2: str, expected: int)",
62
+ "parametrize": "word1, word2, expected",
63
+ "test_cases": {
64
+ "list": [
65
+ "('horse', 'ros', 3)",
66
+ "('intention', 'execution', 5)",
67
+ "('', '', 0)",
68
+ "('', 'a', 1)",
69
+ "('a', '', 1)",
70
+ "('a', 'a', 0)",
71
+ "('ab', 'a', 1)",
72
+ "('a', 'ab', 1)",
73
+ "('ab', 'ba', 2)",
74
+ "('abc', 'abc', 0)",
75
+ "('abc', 'abd', 1)",
76
+ "('kitten', 'sitting', 3)",
77
+ "('saturday', 'sunday', 3)",
78
+ "('', 'abc', 3)"
79
+ ]
80
+ },
81
+ "body": " result = run_min_distance(Solution, word1, word2)\n assert_min_distance(result, expected)"
82
+ }
83
+ ]
84
+ },
85
+ "playground_imports": "from helpers import run_min_distance, assert_min_distance\nfrom solution import Solution",
86
+ "playground_setup": "# Example test case\nword1 = 'horse'\nword2 = 'ros'\nexpected = 3",
87
+ "playground_run": "result = run_min_distance(Solution, word1, word2)\nresult",
88
+ "playground_assert": "assert_min_distance(result, expected)"
89
+ }
@@ -0,0 +1,96 @@
1
+ {
2
+ "problem_name": "interleaving_string",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "97",
5
+ "problem_title": "Interleaving String",
6
+ "difficulty": "Medium",
7
+ "topics": "String, Dynamic Programming",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "Given strings `s1`, `s2`, and `s3`, find whether `s3` is formed by an **interleaving** of `s1` and `s2`.\n\nAn interleaving of two strings `s` and `t` is a configuration where `s` and `t` are divided into `n` and `m` substrings respectively, such that:\n\n- s = s1 + s2 + ... + sn\n- t = t1 + t2 + ... + tm\n- |n - m| <= 1\n- The interleaving is s1 + t1 + s2 + t2 + s3 + t3 + ... or t1 + s1 + t2 + s2 + t3 + s3 + ...\n\n**Note:** `a + b` is the concatenation of strings `a` and `b`.",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "![Example 1](https://assets.leetcode.com/uploads/2020/09/02/interleave.jpg)\n\n```\nInput: s1 = \"aabcc\", s2 = \"dbbca\", s3 = \"aadbbcbcac\"\nOutput: true\nExplanation: One way to obtain s3 is:\nSplit s1 into s1 = \"aa\" + \"bc\" + \"c\", and s2 into s2 = \"dbbc\" + \"a\".\nInterleaving the two splits, we get \"aadbbcbcac\".\n```"
16
+ },
17
+ {
18
+ "content": "```\nInput: s1 = \"aabcc\", s2 = \"dbbca\", s3 = \"aadbbbaccc\"\nOutput: false\nExplanation: Notice how it is hard to find a viable interleaving because s3 must preserve the character order of s1 and s2.\n```"
19
+ },
20
+ {
21
+ "content": "```\nInput: s1 = \"\", s2 = \"\", s3 = \"\"\nOutput: true\n```"
22
+ }
23
+ ]
24
+ },
25
+ "readme_constraints": "- 0 <= s1.length, s2.length <= 100\n- 0 <= s3.length <= 200\n- s1, s2, and s3 consist of lowercase English letters.",
26
+ "readme_additional": "",
27
+ "helpers_imports": "",
28
+ "helpers_content": "",
29
+ "helpers_run_name": "is_interleave",
30
+ "helpers_run_signature": "(solution_class: type, s1: str, s2: str, s3: str)",
31
+ "helpers_run_body": " implementation = solution_class()\n return implementation.is_interleave(s1, s2, s3)",
32
+ "helpers_assert_name": "is_interleave",
33
+ "helpers_assert_signature": "(result: bool, expected: bool) -> bool",
34
+ "helpers_assert_body": " assert result == expected\n return True",
35
+ "solution_imports": "",
36
+ "solution_contents": "",
37
+ "solution_class_content": "",
38
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_is_interleave, run_is_interleave\nfrom .solution import Solution",
39
+ "test_content": "",
40
+ "test_class_name": "InterleavingString",
41
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
42
+ "_solution_methods": {
43
+ "list": [
44
+ {
45
+ "name": "is_interleave",
46
+ "signature": "(self, s1: str, s2: str, s3: str) -> bool",
47
+ "body": " # TODO: Implement is_interleave\n return False"
48
+ }
49
+ ]
50
+ },
51
+ "_test_helper_methods": {
52
+ "list": [
53
+ {
54
+ "name": "setup_method",
55
+ "parameters": "",
56
+ "body": "self.solution = Solution()"
57
+ }
58
+ ]
59
+ },
60
+ "_test_methods": {
61
+ "list": [
62
+ {
63
+ "name": "test_is_interleave",
64
+ "signature": "(self, s1: str, s2: str, s3: str, expected: bool)",
65
+ "parametrize": "s1, s2, s3, expected",
66
+ "test_cases": {
67
+ "list": [
68
+ "('aabcc', 'dbbca', 'aadbbcbcac', True)",
69
+ "('aabcc', 'dbbca', 'aadbbbaccc', False)",
70
+ "('', '', '', True)",
71
+ "('', '', 'a', False)",
72
+ "('a', '', 'a', True)",
73
+ "('', 'b', 'b', True)",
74
+ "('a', 'b', 'ab', True)",
75
+ "('a', 'b', 'ba', True)",
76
+ "('a', 'b', 'a', False)",
77
+ "('ab', 'cd', 'acbd', True)",
78
+ "('ab', 'cd', 'abcd', True)",
79
+ "('ab', 'cd', 'cdab', True)",
80
+ "('ab', 'cd', 'acdb', True)",
81
+ "('aa', 'ab', 'aaab', True)",
82
+ "('aa', 'ab', 'aaba', True)",
83
+ "('abc', 'def', 'abcdef', True)",
84
+ "('abc', 'def', 'adbecf', True)",
85
+ "('abc', 'def', 'defabc', True)"
86
+ ]
87
+ },
88
+ "body": " result = run_is_interleave(Solution, s1, s2, s3)\n assert_is_interleave(result, expected)"
89
+ }
90
+ ]
91
+ },
92
+ "playground_imports": "from helpers import run_is_interleave, assert_is_interleave\nfrom solution import Solution",
93
+ "playground_setup": "# Example test case\ns1 = 'aabcc'\ns2 = 'dbbca'\ns3 = 'aadbbcbcac'\nexpected = True",
94
+ "playground_run": "result = run_is_interleave(Solution, s1, s2, s3)\nresult",
95
+ "playground_assert": "assert_is_interleave(result, expected)"
96
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "problem_name": "n_queens",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "51",
5
+ "problem_title": "N-Queens",
6
+ "difficulty": "Hard",
7
+ "topics": "Array, Backtracking",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "The **n-queens** puzzle is the problem of placing `n` queens on an `n x n` chessboard such that no two queens attack each other.\n\nGiven an integer `n`, return *all distinct solutions to the **n-queens puzzle***. You may return the answer in **any order**.\n\nEach solution contains a distinct board configuration of the n-queens' placement, where `'Q'` and `'.'` both indicate a queen and an empty space, respectively.",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "![Example 1](https://assets.leetcode.com/uploads/2020/11/13/queens.jpg)\n\n```\nInput: n = 4\nOutput: [[\".Q..\",\"...Q\",\"Q...\",\"..Q.\"],[\"..Q.\",\"Q...\",\"...Q\",\".Q..\"]]\nExplanation: There exist two distinct solutions to the 4-queens puzzle as shown above\n```"
16
+ },
17
+ {
18
+ "content": "```\nInput: n = 1\nOutput: [[\"Q\"]]\n```"
19
+ }
20
+ ]
21
+ },
22
+ "readme_constraints": "- 1 <= n <= 9",
23
+ "readme_additional": "",
24
+ "helpers_imports": "",
25
+ "helpers_content": "def assert_solve_n_queens_solution_count(result: list[list[str]], expected: int) -> bool:\n assert len(result) == expected\n return True",
26
+ "helpers_run_name": "solve_n_queens",
27
+ "helpers_run_signature": "(solution_class: type, n: int)",
28
+ "helpers_run_body": " implementation = solution_class()\n return implementation.solve_n_queens(n)",
29
+ "helpers_assert_name": "solve_n_queens",
30
+ "helpers_assert_signature": "(result: list[list[str]], expected: list[list[str]]) -> bool",
31
+ "helpers_assert_body": " # Sort both result and expected for order-independent comparison\n result_sorted = sorted(result)\n expected_sorted = sorted(expected)\n assert result_sorted == expected_sorted\n return True",
32
+ "solution_imports": "",
33
+ "solution_contents": "",
34
+ "solution_class_content": "",
35
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_solve_n_queens, assert_solve_n_queens_solution_count, run_solve_n_queens\nfrom .solution import Solution",
36
+ "test_content": "",
37
+ "test_class_name": "NQueens",
38
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
39
+ "_solution_methods": {
40
+ "list": [
41
+ {
42
+ "name": "solve_n_queens",
43
+ "signature": "(self, n: int) -> list[list[str]]",
44
+ "body": " # TODO: Implement solve_n_queens\n return []"
45
+ }
46
+ ]
47
+ },
48
+ "_test_helper_methods": {
49
+ "list": [
50
+ {
51
+ "name": "setup_method",
52
+ "parameters": "",
53
+ "body": "self.solution = Solution()"
54
+ }
55
+ ]
56
+ },
57
+ "_test_methods": {
58
+ "list": [
59
+ {
60
+ "name": "test_solve_n_queens",
61
+ "signature": "(self, n: int, expected: list[list[str]])",
62
+ "parametrize": "n, expected",
63
+ "test_cases": {
64
+ "list": [
65
+ "(1, [['Q']])",
66
+ "(2, [])",
67
+ "(3, [])",
68
+ "(4, [['..Q.', 'Q...', '...Q', '.Q..'], ['.Q..', '...Q', 'Q...', '..Q.']])",
69
+ "(5, [['....Q', '..Q..', 'Q....', '...Q.', '.Q...'], ['....Q', '.Q...', '...Q.', 'Q....', '..Q..'], ['...Q.', '.Q...', '....Q', '..Q..', 'Q....'], ['...Q.', 'Q....', '..Q..', '....Q', '.Q...'], ['..Q..', '....Q', '.Q...', '...Q.', 'Q....'], ['..Q..', 'Q....', '...Q.', '.Q...', '....Q'], ['.Q...', '....Q', '..Q..', 'Q....', '...Q.'], ['.Q...', '...Q.', 'Q....', '..Q..', '....Q'], ['Q....', '...Q.', '.Q...', '....Q', '..Q..'], ['Q....', '..Q..', '....Q', '.Q...', '...Q.']])",
70
+ "(6, [['....Q.', '..Q...', 'Q.....', '.....Q', '...Q..', '.Q....'], ['...Q..', 'Q.....', '....Q.', '.Q....', '.....Q', '..Q...'], ['..Q...', '.....Q', '.Q....', '....Q.', 'Q.....', '...Q..'], ['.Q....', '...Q..', '.....Q', 'Q.....', '..Q...', '....Q.']])"
71
+ ]
72
+ },
73
+ "body": " result = run_solve_n_queens(Solution, n)\n assert_solve_n_queens(result, expected)"
74
+ },
75
+ {
76
+ "name": "test_solve_n_queens_solution_count",
77
+ "signature": "(self, n: int, expected_count: int)",
78
+ "parametrize": "n, expected_count",
79
+ "test_cases": {
80
+ "list": ["(4, 2)", "(5, 10)", "(6, 4)", "(7, 40)", "(8, 92)", "(9, 352)"]
81
+ },
82
+ "body": " result = run_solve_n_queens(Solution, n)\n assert_solve_n_queens_solution_count(result, expected_count)"
83
+ }
84
+ ]
85
+ },
86
+ "playground_imports": "from helpers import run_solve_n_queens, assert_solve_n_queens\nfrom solution import Solution",
87
+ "playground_setup": "# Example test case\nn = 4\nexpected = [['..Q.', 'Q...', '...Q', '.Q..'], ['.Q..', '...Q', 'Q...', '..Q.']]",
88
+ "playground_run": "result = run_solve_n_queens(Solution, n)\nresult",
89
+ "playground_assert": "assert_solve_n_queens(result, expected)"
90
+ }
@@ -0,0 +1,92 @@
1
+ {
2
+ "problem_name": "plus_one",
3
+ "solution_class_name": "Solution",
4
+ "problem_number": "66",
5
+ "problem_title": "Plus One",
6
+ "difficulty": "Easy",
7
+ "topics": "Array, Math",
8
+ "_tags": {
9
+ "list": ["neetcode-150"]
10
+ },
11
+ "readme_description": "You are given a **large integer** represented as an integer array `digits`, where each `digits[i]` is the `ith` digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading `0`'s.\n\nIncrement the large integer by one and return *the resulting array of digits*.",
12
+ "_readme_examples": {
13
+ "list": [
14
+ {
15
+ "content": "```\nInput: digits = [1,2,3]\nOutput: [1,2,4]\nExplanation: The array represents the integer 123.\nIncrementing by one gives 123 + 1 = 124.\nThus, the result should be [1,2,4].\n```"
16
+ },
17
+ {
18
+ "content": "```\nInput: digits = [4,3,2,1]\nOutput: [4,3,2,2]\nExplanation: The array represents the integer 4321.\nIncrementing by one gives 4321 + 1 = 4322.\nThus, the result should be [4,3,2,2].\n```"
19
+ },
20
+ {
21
+ "content": "```\nInput: digits = [9]\nOutput: [1,0]\nExplanation: The array represents the integer 9.\nIncrementing by one gives 9 + 1 = 10.\nThus, the result should be [1,0].\n```"
22
+ }
23
+ ]
24
+ },
25
+ "readme_constraints": "- 1 <= digits.length <= 100\n- 0 <= digits[i] <= 9\n- digits does not contain any leading 0's.",
26
+ "readme_additional": "",
27
+ "helpers_imports": "",
28
+ "helpers_content": "",
29
+ "helpers_run_name": "plus_one",
30
+ "helpers_run_signature": "(solution_class: type, digits: list[int])",
31
+ "helpers_run_body": " implementation = solution_class()\n return implementation.plus_one(digits)",
32
+ "helpers_assert_name": "plus_one",
33
+ "helpers_assert_signature": "(result: list[int], expected: list[int]) -> bool",
34
+ "helpers_assert_body": " assert result == expected\n return True",
35
+ "solution_imports": "",
36
+ "solution_contents": "",
37
+ "solution_class_content": "",
38
+ "test_imports": "import pytest\nfrom leetcode_py import logged_test\nfrom .helpers import assert_plus_one, run_plus_one\nfrom .solution import Solution",
39
+ "test_content": "",
40
+ "test_class_name": "PlusOne",
41
+ "test_class_content": " def setup_method(self):\n self.solution = Solution()",
42
+ "_solution_methods": {
43
+ "list": [
44
+ {
45
+ "name": "plus_one",
46
+ "signature": "(self, digits: list[int]) -> list[int]",
47
+ "body": " # TODO: Implement plus_one\n return []"
48
+ }
49
+ ]
50
+ },
51
+ "_test_helper_methods": {
52
+ "list": [
53
+ {
54
+ "name": "setup_method",
55
+ "parameters": "",
56
+ "body": "self.solution = Solution()"
57
+ }
58
+ ]
59
+ },
60
+ "_test_methods": {
61
+ "list": [
62
+ {
63
+ "name": "test_plus_one",
64
+ "signature": "(self, digits: list[int], expected: list[int])",
65
+ "parametrize": "digits, expected",
66
+ "test_cases": {
67
+ "list": [
68
+ "([1, 2, 3], [1, 2, 4])",
69
+ "([4, 3, 2, 1], [4, 3, 2, 2])",
70
+ "([9], [1, 0])",
71
+ "([0], [1])",
72
+ "([1, 0, 0, 0], [1, 0, 0, 1])",
73
+ "([9, 9], [1, 0, 0])",
74
+ "([9, 9, 9], [1, 0, 0, 0])",
75
+ "([8, 9, 9, 9], [9, 0, 0, 0])",
76
+ "([2], [3])",
77
+ "([1, 9], [2, 0])",
78
+ "([7, 7, 7], [7, 7, 8])",
79
+ "([5, 9, 9], [6, 0, 0])",
80
+ "([1, 2, 9], [1, 3, 0])",
81
+ "([6, 1, 4, 9], [6, 1, 5, 0])"
82
+ ]
83
+ },
84
+ "body": " result = run_plus_one(Solution, digits)\n assert_plus_one(result, expected)"
85
+ }
86
+ ]
87
+ },
88
+ "playground_imports": "from helpers import run_plus_one, assert_plus_one\nfrom solution import Solution",
89
+ "playground_setup": "# Example test case\ndigits = [1, 2, 3]\nexpected = [1, 2, 4]",
90
+ "playground_run": "result = run_plus_one(Solution, digits)\nresult",
91
+ "playground_assert": "assert_plus_one(result, expected)"
92
+ }