문자열에 특정 수의 자음과 모음이 포함되어 있는지 확인하는 방법은 무엇입니까?

Aug 17 2020

프로그래밍 방식으로 다음 문제의 답을 확인하려고합니다. 수동 계산이 가능해야하지만 내 질문이 아닙니다.

"aeeiuchklpr"길이 11의 문자열 이 주어 집니다. 문자 "e"는 두 번 나타납니다. 오타가 아닙니다. 주어진 문자열의 6- 순열은 몇 개입니까? 제약 조건은 다음과 같습니다.

  • 첫 번째 문자는 "h"여야합니다.
  • 마지막 문자는 모음이어야합니다.
  • 자음의 수는 정확히 4 개 여야합니다.
  • 모음 수는 정확히 2 개 여야합니다.

시도

위의 마지막 두 가지 요구 사항을 확인하는 방법을 모르겠습니다. 여기 내 시도

Select[Permutations[StringSplit["aeeiuchklpr", ""], {6}],
  First[#] == "h" &&
    (Last[#] == "a" || Last[#] == "e" || Last[#] == "i" || 
      Last[#] == "u") &] // Length

답변

6 Hausdorff Aug 17 2020 at 12:26
VowelQ[s_String] := MatchQ[s, "a" | "e" | "i" | "o" | "u"];   

Select[Permutations[StringSplit["aeeiuchklpr", ""], {6}], 
    First[#] == "h" && VowelQ[Last@#] && Count[VowelQ /@ #, True] == 2 &] // Length
3120
3 ArminVollmer Aug 18 2020 at 18:23

제한된 패턴을 사용하여 한 줄로 약간 다른 구현 :

Count[Permutations[
  Characters["aeeiuchklpr"], {6}], {"h", m__, 
   vowels = ("a" | "e" | "i" | "o" | "u")} /; Count[{m}, vowels] == 1]

수확량

3120