見習村27 - First non-repeating character

27 - First non-repeating character

Don’t say so much, just coding…

Instruction

Write a function named first_non_repeating_letter that takes a string input, and returns the first character that is not repeated anywhere in the string.

For example, if given the input 'stress', the function should return 't', since the letter t only occurs once in the string, and occurs first in the string.

As an added challenge, upper- and lowercase letters are considered the same character, but the function should return the correct case for the initial letter. For example, the input 'sTreSS' should return 'T'.

If a string contains all repeating characters, it should return an empty string ("") or None – see sample tests.

Ruby

Init

1
2
3
def tongues(code)
#your code here
end

Sample Testing

1
2
3
4
5
6
7
8
9
10
Test.describe('Simple Tests') do
it('should handle simple tests') do
Test.assert_equals(first_non_repeating_letter('a'), 'a')
Test.assert_equals(first_non_repeating_letter('stress'), 't')
Test.assert_equals(first_non_repeating_letter('moonmen'), 'e')
end
it('should handle empty strings') do
Test.assert_equals(first_non_repeating_letter(''), '')
end
end

Javascript

Init

1
2
3
function firstNonRepeatingLetter(s) {
// Add your code here
}

Sample Testing

1
2
3
4
5
6
7
Test.describe('Simple Tests', function() {
it('should handle simple tests', function() {
Test.assertEquals(firstNonRepeatingLetter('a'), 'a');
Test.assertEquals(firstNonRepeatingLetter('stress'), 't');
Test.assertEquals(firstNonRepeatingLetter('moonmen'), 'e');
});
});

Thinking

https://ithelp.ithome.com.tw/upload/images/20201012/20120826YzLdi5jaAH.jpg
圖片來源:Unsplash Nikita Kachanovsky

Hint & Reference

Solution

Ruby

1
2
3
4
5
6
7
8
9
10
# Solution 1
def first_non_repeating_letter(s)
letter = s.chars.find{ |char| s.chars.map(&:downcase).count(char.downcase) == 1 }
letter.nil? ? '' : letter
end

# Solution 2
def first_non_repeating_letter(s)
s.chars.find{ |i| s.downcase.count(i) == 1 || s.upcase.count(i) == 1 } || ''
end

Javascript

1
2
3
4
5
6
7
8
9
// Solution 1
function firstNonRepeatingLetter(s) {
for(var i in s) {
if(s.match(new RegExp(s[i],"gi")).length === 1) {
return s[i];
}
}
return '';
}