2

我有一些这样的字符串:

'RRSSTT'
'RRRSSSTTT'
'RRRRSSSSTTTT'
 etc...

我需要使用此属性提取所有唯一排列:

  • 'RRSSTT' ; 'RRTTSS' ; 'SSRRTT' ; 'SSTTRR' ; 'TTRRSS' ; 'TTSSRR' 都是相同的字符串,并且
  • 'RSTRST' ; 'RTSRTS' ; 'TSRTSR' ; 'TRSTRS' ; 'SRTSRT' ; 'STRSTR' 都是相同的字符串。

使用命令perms我获得所有排列(如果字符串有 6 个元素,排列是 720)。使用uperms脚本,我获得了所有唯一的排列(如果字符串有 6 个元素,则排列为 90)。我uperm在 mathworks 上找到了(http://www.mathworks.com/matlabcentral/fileexchange/27321-unique-random-permutations)。

直到这里一切正常,但我需要编写/找到一个生成具有上述特殊属性的排列的其他算法。如果字符串是“RRSSTT”,则所需的排列必须是 15。

有人已经面临这个问题并且可以帮助我吗?

- - - 编辑 - - -

有 15 组等效字符串,例如:

Group 1:          Group 6:        Group 11:

'RSTTSR'         'RSTSTR'         'RSSTRT'
'SRTTRS'         'SRTRTS'         'STSRRT'
'STRRTS'         'STRTRS'         'RSRTTS'
'RTSSTR'         'TRSRST'         'STTRSR'
'TRSSRT'         'TSRSRT'         'TRRSTS'
'TSRRST'         'RTSTSR'         'TRTSSR'

Group 2:          Group 7:        Group 12:

'RSTRST'         'RSSRTT'         'RSSTTR'
'SRTSRT'         'SSTRRT'         'SRRTTS'
'STRSTR'         'RRSTTS'         'STTRRS'
'RTSRTS'         'STTSRR'         'TRRSST'
'TRSTRS'         'TRRTSS'         'TSSRRT'
'TSRTSR'         'TTRSSR'         'RTTSSR'

Group 3:          Group 8:        Group 13:

'RSTSRT'         'SRRSTT'         'SRSTTR'
'STRSRT'         'SSRTTR'         'SRRTST'
'RSTRTS'         'RRTSST'         'RTRSST'
'STRTSR'         'TSSTRR'         'TSSRTR'
'TRSRTS'         'RTTRSS'         'TSTRRS'
'TRSTSR'         'TTSRRS'         'RTTSRS'

Group 4:          Group 9:        Group 14:

'SRTRST'         'RSRSTT'         'RRSSTT'
'SRTSTR'         'SSRTRT'         'SSRRTT'
'RTSRST'         'STSTRR'         'SSTTRR'
'TSRSTR'         'RRTSTS'         'RRTTSS'
'RTSTRS'         'TRTRSS'         'TTRRSS'
'TSRTRS'         'TTSRSR'         'TTSSRR'

Group 5:          Group 10:        Group 15:

'STRRST'         'SRSRTT'         'SRSTRT'
'RSTTRS'         'SSTRTR'         'RSRTST'
'SRTTSR'         'RRSTST'         'STSRTR'
'RTSSRT'         'TSTSRR'         'RTRSTS'
'TRSSTR'         'RTRTSS'         'TSTRSR'
'TSRRTS'         'TTRSRS'         'TRTSRS'

我需要为每个组返回一个字符串,我更喜欢以 R 作为第一个字母的字符串。很抱歉符号更改。

-----编辑1-----

我会试着解释为什么

str1='RSTRST' 

str2='STRSTR' 

是等价的。

您必须考虑 str1 中的“R”并将其替换为“S”,将“S”替换为“T”,最后将“T”替换为“R”。一个组中的所有字符串都是正确的,但是在每个组中所有字符串都是等效的,我只需要从每个组中取一个字符串。

正如烧杯所说,角色替换规则并不总是有效,我需要找到合适的角色。

4

1 回答 1

1

我想现在我理解了您的代码,这将解决它:

  • 用于uperm生成具有所有可能解决方案的集合。
  • 仅在返回(或任何固定顺序)时才调用[a]=unique(solution,'stable')返回的每个解决方案uperm并接受它。RST
于 2016-01-29T17:59:09.943 回答