我想生成一个字符串的每个可能的连续子字符串,包括从单词(循环)字母组合开始的单词的结尾。我在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']`
答案 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