Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวย่อทั่วไปใน C++


สมมติว่ามีคำ เราต้องกำหนดฟังก์ชันที่สามารถสร้างตัวย่อทั่วไปของคำได้

ดังนั้น หากอินพุตเป็นเหมือน "word" ผลลัพธ์จะเป็น ["word", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", " 1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดอาร์เรย์ ret

  • กำหนดฟังก์ชัน Solve() ซึ่งจะใช้เวลา s, idx

  • ถ้า idx>=ขนาดของ s แล้ว −

    • ใส่ s ต่อท้าย ret

    • กลับ

  • y :=สตริงย่อยของ s จากดัชนี 0 ถึง idx - 1

  • ผม :=ขนาดของ y

  • num :=สตริงว่าง

  • ในขณะที่ (i>=0 และ y[i] <=ASCII ของ '9' และ y[i]>=ASCII ของ '0') ทำ -

    • num :=y[i] + num

    • (ลดลง 1)

  • ถ้าฉันไม่เท่ากับขนาดของ y แล้ว −

    • ret :=สตริงย่อยของ s จากดัชนี (0 ถึง idx - (ขนาดของ y - 1 - i) - 1) ต่อกัน (หมายเลข + 1) เป็นสตริงที่เชื่อมสตริงย่อยของ s จากดัชนี (0 ถึง idx)

    • s1 :=num + 1 เป็นสตริง

    • s2 :=num เป็นสตริง

    • ถ้าขนาดของ s1 เท่ากับขนาดของ s2 ดังนั้น −

    • มิฉะนั้น

      • แก้(ret, idx + 1)

  • มิฉะนั้น

    • ก่อนหน้า :=s[idx]

    • s[idx] :='1'

    • แก้(s, idx + 1)

    • s[idx] :=ก่อนหน้า

  • แก้(s, idx + 1)

  • จากวิธีหลัก ให้ทำดังต่อไปนี้ −

  • แก้(คำ, 0)

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include ใช้เนมสเปซ std;void print_vector(vector ret; โมฆะแก้ (สตริง s, int idx){ ถ้า (idx>=s.size ()) { ret.push_back (s); กลับ; } สตริง y =s.substr(0, idx); int i =y.size() - 1; สตริง num =""; ในขณะที่ (i>=0 &&y[i] <='9' &&y[i]>='0') { num =y[i] + num; ฉัน--; } if (i !=y.size() - 1) { string ret =s.substr(0, idx - (y.size() - 1 - i)) + to_string(stoi(num) + 1) + s .substr(idx + 1); สตริง s1 =to_string(stoi(num) + 1); สตริง s2 =to_string(stoi(num)); ถ้า (s1.size() ==s2.size()) แก้ (ret, idx); อย่างอื่นแก้(ret, idx + 1); } อื่น ๆ { ถ่านก่อนหน้า =s[idx]; s[idx] ='1'; แก้(s, idx + 1); s[idx] =ก่อนหน้า; } แก้ (s, idx + 1); } vector 

อินพุต

สวัสดี

ผลลัพธ์

<ก่อน>[5, 4o, 3l1, 3lo, 2l2, 2l1o, 2ll1, 2llo, 1e3, 1e2o, 1e1l1, 1e1lo, 1el2, 1el1o, 1ell1, 1ello, h4, h3o, h2l1, h2lo, h1l1, h h1llo, he3, he2o, he1l1, he1lo, hel2, hel1o, hell1, สวัสดี ]