在perl中获取每个可能的子字符串

时间:2016-05-02 20:27:41

标签: perl substring

我想生成一个字符串的每个可能的连续子字符串,包括从单词(循环)字母组合开始的单词的结尾。我在Python中找到了一个例子,但我所知道的唯一语言是perl(而且几乎不是,我是初学者)。如果有人可以帮助我将代码翻译为perl或帮助我在perl中找到解决方案,我将非常感激。

代码如下:

 aa='ABCD'

 F=[]

 B=[]

 for j in range(1,len(aa)+1,1):

for i in range(0,len(aa),1):

    A=str.split(((aa*j)[i:i+j]))

    B=B+A

    C=(B[0:len(aa)*len(aa)-len(aa)+1])

它给你:

C = [' A',' B',' C',' D'' AB' ,' CD',' DA',' ABC',' BCD',' CDA',' DAB',' ABCD']`

2 个答案:

答案 0 :(得分:6)

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

my $string = 'ABCD';

my @substrings;
for my $length (1 .. length $string) {
    for my $pos (0 .. length($string) - 1) {
        push @substrings, substr $string x 2, $pos, $length;
    }
}

say for @substrings;

答案 1 :(得分:1)

如果您对使用预先构建的解决方案感兴趣,可以结帐Spring Boot and Security with custom AngularJS Login page,我找到了模块String::Substrings。因为你想要“环绕”子串并想要消除与实际字符串长度相同的“子串”,你必须做一些操作:

#!/usr/bin/perl
use strict;
use warnings;
use String::Substrings;
use feature 'say';

my $string = 'ABCD';
my %substrs;
for my $len (1..length($string)-1) {
   $substrs{$_}++ for substrings("$string"x2, $len);
}
say for sort keys %substrs;

结果:

A
AB
ABC
B
BC
BCD
C
CD
CDA
D
DA
DAB