วิธีตรวจสอบว่าสตริงมีพยัญชนะและสระจำนวนหนึ่งหรือไม่?

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