Uniquely trimmed
Weekly challenge 180 — 29 August 2022
Week 180: 29 Aug 2022
You are given a string, $s
.
Write a script to find out the first unique character in the given string and print its index (0-based).
Example 1 Input: $s = "Perl Weekly Challenge" Output: 0 as 'P' is the first unique character Example 2 Input: $s = "Long Live Perl" Output: 1 as 'o' is the first unique character
I had high hopes for:
$s =~ m|^(.*?)(.)([^\2]*)$|which says:
But it doesn't work, and I'm not sure why.
So I settled for cycling through the characters and searching for a further occurrence of each; when none is found, we have the answer.
#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2022-08-29 use utf8; # Week 180 - task 1 - First unique character use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; first_unique_character('Perl Weekly Challenge'); first_unique_character('Long Live Perl'); first_unique_character('Cheer Cheer Cheer'); sub first_unique_character { my ($str, $j, $char); $str = shift; say qq[\nInput: \$s = '$str']; # loop over characters for $j (0 .. length($str) - 1) { $char = substr($str, $j, 1); # no good if it recurs next if $str =~ m|^(.*)$char.*$char.*$|; # found the answer say qq[Output: $j (character = '$char')]; return; } # no non-repeating character say qq[Output: -1]; }
Input: $s = 'Perl Weekly Challenge' Output: 0 (character = 'P') Input: $s = 'Long Live Perl' Output: 1 (character = 'o') Input: $s = 'Cheer Cheer Cheer' Output: -1
Any content of this website which has been created by Peter Campbell Smith is in the public domain