การแยกตัวของคำ Lyndon


11

พื้นหลัง

คำลินดอนเป็นสตริงที่ไม่ว่างเปล่าซึ่งเป็นอย่างเคร่งครัด lexicographically ขนาดเล็กกว่าทุกหมุนเวียนอื่น ๆ มันเป็นไปได้ที่จะแยกแยะสตริงใด ๆ ที่ไม่ซ้ำกันในขณะที่การเรียงคำของลินดอนเช่นว่าคำย่อยเหล่านี้ไม่ได้เพิ่มคำในพจนานุกรม ความท้าทายของคุณคือทำสิ่งนี้ให้รัดกุมที่สุด

รายละเอียด

คุณควรใช้ฟังก์ชั่นหรือโปรแกรมที่ระบุการแยกตัวประกอบคำของ Lyndon ของสตริง ASCII ที่พิมพ์ได้ตามลำดับเพื่อส่งออกสตริงย่อยผลลัพธ์เป็นอาร์เรย์หรือสตรีมบางชนิด ควรเปรียบเทียบอักขระด้วยจุดรหัสและอนุญาตวิธีการอินพุตและเอาต์พุตมาตรฐานทั้งหมด ตามปกติสำหรับโปรแกรมที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ

กรณีทดสอบ

''           []
'C'          ['C']
'aaaaa'      ['a', 'a', 'a', 'a', 'a']
'K| '        ['K|', ' ']
'abaca'      ['abac', 'a']
'9_-$'       ['9_', '-', '$']
'P&O(;'      ['P', '&O(;']
'xhya{Wd$'   ['x', 'hy', 'a{', 'Wd', '$']
'j`M?LO!!Y'  ['j', '`', 'M', '?LO', '!!Y']
'!9!TZ'      ['!9!TZ']
'vMMe'       ['v', 'MMe']
'b5A9A9<5{0' ['b', '5A9A9<5{', '0']


โปรดทราบว่านี่เทียบเท่ากับการแยกโดย<=ness (ฉันไม่รู้เลยว่าจะอธิบายสิ่งนี้ดีกว่า: |)
CalculatorFeline

นี่เทียบเท่ากับการรับตัวอักษรตัวแรกและคำนำหน้าของตัวละครทั้งหมดที่ใหญ่กว่าซ้ำหรือไม่
xnor

@xnor No. 'abac' เป็นคำ Lyndon
user1502040

@ user1502040 ฉันเห็นแล้วว่าความสัมพันธ์เป็นสิ่งที่น่าสนใจ ฉันขอแนะนำให้เพิ่มกรณีทดสอบที่จับได้
xnor

คำตอบ:


5

Pyth, 17 16 ไบต์

-1 ไบต์ขอบคุณ isaacg!

hf!ff>Y>YZUYT+./

ลองออนไลน์!

คำอธิบาย

hf!ff>Y>YZUYT+./
              ./    Take all possible disjoint substring sets of [the input]
             +      plus [the input] itself (for the null string case).
 f                  Filter for only those sets which
  !f        T       for none of the substrings
    f  >YZUY        is there a suffix of the substring
     >Y             lexographically smaller than the substring itself.
h                   Return the first (i.e. the shortest) such set of substrings.

1
hf!ff>Y>YZUYT+./บัญชีสำหรับกรณีสตริงว่างที่มี 1 ไบต์น้อยกว่า
isaacg

ดีมากขอบคุณ! ฉันรู้สึกเหมือนว่าจะต้องมีวิธีที่สั้นกว่า
notjagan


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.