采访者在一次采访中问了一个问题,快速写了一个问题.以下功能的有效算法,
问题:编写一个函数来解析给定的字符串以获得以下给定的规则&生成最终解析的字符串作为输出
写一个接受字符串作为输入的函数,字符串长度将在[0..2000000000]之间
string should be made from only ‘A’,’B’ & ‘C’ characters like ‘AAA’,’ABCABC’,’AAAABBBBABAAACCCA’
转型规则:
1)’AB’ – > ‘AA’
2)’AC’ – > ‘AA’
3)’AA’ – > ‘一个’
4)’CC’ – > ‘C’
5)’BC’ – > ‘BB’
6)’BB’ – > ‘B’
每次在给定字符串上随机应用以上6条规则,并将最终转换后的字符串作为输出
例如,对Function的输入是:’ABCAAB’字符串
ABCAAB – > AACAAB [AB = AA]
AACAAB – > ACAAB [AA = A]
ACAAB – > AAAAB [AC = AA]
AAAAB – > AAAB [AA = A]
AAAB – > AAB [AA = A]
AAB – > AB [AA = A]
AB – > AA [AB = AA]
AA – > A [AA = A]
最终结果:’A’
因为我们现在无法对字符串应用任何其他规则.
我的答案就像(伪代码):
sub myFunc { my $str = @_; flag = 1 while(flag ==1) { if ($str =~ /AB/){ $str =~ s/AB/AA/; next; } elsif($str =~ /AC/){ $str =~ s/AC/AA/; next; } elsif($str =~ /AA/){ $str =~ s/AA/A/; next; } elsif($str =~ /CC/){ $str =~ s/CC/C/; next; } elsif($str =~ /BC/){ $str =~ s/BC/BB/; next; } elsif($str =~ /BB/){ $str =~ s/BB/B/; next; } else { flag = 0 } } //while return $str; } //func
有人可以建议更好的算法&处理上述问题?