大文字と小文字の両方が異なる2つの隣接する文字を含む単語を削除するにはどうすればよいですか?
Aug 24 2020
の順列のリストがありABCabc
、大文字と小文字の両方が異なる2つの隣接する文字の順列を削除したいと思います。
例えば、
ABCcab
保持されます。ABCacb
大文字と小文字Ca
が異なる2つの隣接する文字が含まれているため、削除する必要があります。AbBcaC
同様に削除する必要があります。
試みる
これが私の試みですが、フィルタリングはしていません。
Select[StringJoin /@ Permutations[Characters@"ABCabc"],....]
回答
9 kglr Aug 23 2020 at 23:56
slist = StringJoin /@ Permutations[Characters@"ABCabc"];
pat = a_ ~~ b_ /; ToUpperCase[a] != ToUpperCase[b] && UpperCaseQ[a] != UpperCaseQ[b];
Select[StringFreeQ[pat]]@slist
{"ABCcab", "ABCcba", "ABbacC", "ACBbac", "ACBbca", "ACcabB", "AabBCc", "AabcCB", "AacCBb", "AacbBC", "BACcab", "BACcba", "BAabcC", "BCAabc", "BCAacb", "BCcbaA", "BbaACc", "BbacCA", "BbcCAa", "BbcaAC", "CABbac", "CABbca", "CAacbB", "CBAabc", "CBAacb", "CBbcaA", "CcaABb", "CcabBA", "CcbBAa", "CcbaAB", "aABCcb", "aABbcC", "aACBbc", "aACcbB", "abBACc", "abcCAB", "abcCBA", "acCABb", "acbBAC", "acbBCA", "bBACca", "bBAacC", "bBCAac", "bBCcaA", "baABCc", "bacCAB", "bacCBA", "bcCBAa", "bcaABC", "bcaACB", "cCABba", "cCAabB", "cCBAab", "cCBbaA", "caACBb", "cabBAC", "cabBCA", "cbBCAa", "cbaABC", "cbaACB"}
4 MichaelE2 Aug 23 2020 at 23:45
多分これ?:
DeleteCases[StringJoin /@ Permutations[Characters@"ABCabc"],
s_String /;
StringMatchQ[s,
___ ~~ a_ ~~ b_ ~~ ___ /;
! LowerCaseQ[a <> b] &&
! UpperCaseQ[a <> b] &&
ToLowerCase[a] =!= ToLowerCase[b]]]