From 19c2a3a6db49ea2ca5cd6b2dd424d48aa888f84a Mon Sep 17 00:00:00 2001 From: Michaela Morrow Date: Sun, 15 Sep 2019 22:31:14 -0700 Subject: [PATCH 1/2] Defined 'remove_duplicates' and 'longest_prefix' methods --- lib/practice_exercises.rb | 44 +++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) 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 From 2e6f0804b50528cd083797be617143a59af17fb5 Mon Sep 17 00:00:00 2001 From: Michaela Morrow Date: Sun, 15 Sep 2019 22:32:10 -0700 Subject: [PATCH 2/2] Added additional unit tests for 'longest_prefix' method --- test/practice_exercises_test.rb | 38 +++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 11 deletions(-) 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