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实例---构造回文的主要内容,如果未能解决你的问题,请参考以下文章

片段事务中的实例化错误

如何有条件地将 C 代码片段编译到我的 Perl 模块?

springboot启动流程构造SpringApplication实例对象

Android 逆向使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 创建反汇编解析器实例对象 | 设置汇编解析器显示细节 )(代码片段

在 Visual Studio 中创建构造函数的代码片段或快捷方式

构造回文 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。