把相同的词汇、句子或字符串,在文中调换位置或颠倒过来,产生首尾回环的结构,叫做回文例如:知难而退,退难而知,我来为大家科普一下关于perl如何传递参数?以下内容希望对你有帮助!
perl如何传递参数
把相同的词汇、句子或字符串,在文中调换位置或颠倒过来,产生首尾回环的结构,叫做回文。例如:知难而退,退难而知
为了形成回文结构,可以通过在字符串前增加字符的方式来构造。例如序列:AACTCAAA,通过在前面增加A碱基,即可形成回文:AAACTCAAA。
解题思路:
我们需要在字符串前面加字符来构造回文, 那么我们可以反向的, 也就是在字符串结尾依次删除字符, 来判断是否回文, 这样可以得到所需添加的所有字符。
my $str = 'atacg';
由于我们每次删除一个字符, 都需要来判断是否回文, 因此我们把这个判断过程独立出来, 单独写成一个方法。
sub is_hui{
my $str = shift;
my @str = split '', $str;
my @re_str = reverse @str;
for my $s(@str){
my $ss = shift @re_str;
if($s ne $ss){
return 0;
}
}
return 1;
}
现将字符串切割成字符数组
my @strs = split '', $str;
定义一个数组, 用来按顺序记录被删除的字符
my @poped;
循环操作, 每次删除最后面一个字符, 存入@poped数组, 然后测试是否是回文, 如是回文, 则依次在左侧增加删除的元素即成回文了, 如不是则依次继续循环:
while(1){
my $poped = pop @strs;
my $str_tmp = join '', @strs;
push @poped, $poped;
if(is_hui($str_tmp)){
my $pre = join '', @poped;
print "$pre$str\n";
exit;
}
}