Perl实例---构造回文
Posted EasyPerl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}
}
以上是关于Perl实例---构造回文的主要内容,如果未能解决你的问题,请参考以下文章
springboot启动流程构造SpringApplication实例对象
Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段
在 Visual Studio 中创建构造函数的代码片段或快捷方式
构造回文 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。