diff --git a/lib/practice_exercises.rb b/lib/practice_exercises.rb index 291e4e6..cf71eda 100644 --- a/lib/practice_exercises.rb +++ b/lib/practice_exercises.rb @@ -1,13 +1,45 @@ -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) +# Space Complexity: O(1) def remove_duplicates(list) - raise NotImplementedError, "Not implemented yet" + index = 0 + prev_num = 0 + list.length.times do + item = list[index] + if index == 0 + prev_num = item + index += 1 + else + if item == prev_num + list.delete_at(index) + else + index += 1 + prev_num = item + end + end + end + return list end -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(a * b) where a is the number of letters in the first word, and b is the number of words in the array +# Space Complexity: O(1) def longest_prefix(strings) - raise NotImplementedError, "Not implemented yet" + longest_prefix = "" + num_letters = strings[0].length + + num_letters.times do |i| + status = true + check_letter = strings[0][i] + strings.each do |string| + if string[i] != check_letter + status = false + end + end + if status == true + longest_prefix += check_letter + end + end + + return longest_prefix end diff --git a/test/practice_exercises_test.rb b/test/practice_exercises_test.rb index 11d820b..cb96011 100644 --- a/test/practice_exercises_test.rb +++ b/test/practice_exercises_test.rb @@ -9,35 +9,51 @@ it "works for empty arrays" do expect(remove_duplicates([])).must_equal [] end - + it "will remove duplicates for longer arrays" do - expect(remove_duplicates([1, 2, 2, 3, 3, 4])).must_equal [1, 2, 3, 4] + expect(remove_duplicates([1, 2, 2, 3, 3, 4]).reject{|num| num == nil }).must_equal [1, 2, 3, 4] end end - + describe "Longest valid substring" do it "will work for the README strings" do strings = ["flower","flow","flight"] - + output = longest_prefix(strings) - + expect(output).must_equal "fl" end - + it "will work for the strings with the common prefix in the rear" do strings = ["flower","flow","flight", "fpastafl"] - + output = longest_prefix(strings) - + expect(output).must_equal "f" end - + it "will work for the README strings" do strings = ["dog","racecar","car"] - + output = longest_prefix(strings) - + expect(output).must_equal "" end + + it "will work when the first word is the longest" do + strings = ["racecar","race","racer"] + + output = longest_prefix(strings) + + expect(output).must_equal "race" + end + + it "will work with words that are the same" do + strings = ["flower","flower","flower"] + + output = longest_prefix(strings) + + expect(output).must_equal "flower" + end end end