สมมติว่าเรามีสตริงที่ไม่ว่างซึ่งมีการแสดงตัวเลข 0-9 ภาษาอังกฤษที่ไม่เรียงลำดับ โดยจะส่งออกตัวเลขในลำดับจากน้อยไปมาก มีคุณสมบัติบางอย่าง -
- อินพุตรับประกันว่าถูกต้องและสามารถแปลงเป็นตัวเลขดั้งเดิมได้ นั่นหมายถึงไม่อนุญาตให้ป้อนข้อมูลที่ไม่ถูกต้อง เช่น "abc" หรือ "zeone"
- ความยาวอินพุตน้อยกว่า 50,000
ดังนั้นหากอินพุตเป็นเหมือน “fviefuro” เอาต์พุตจะเป็น 45
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- nums :=อาร์เรย์ที่มีตัวเลขเป็นตัวอักษรภาษาอังกฤษตั้งแต่ 0 ถึง 9
- ทำการนับขนาด 10 อาร์เรย์หนึ่งอาร์เรย์
- ans :=สตริงว่าง และ n :=ขนาดของสตริง
- สำหรับฉันในช่วง 0 ถึง n – 1 ทำ
- ถ้า s[i] ='z' ให้เพิ่มจำนวน[0] ขึ้น 1
- ถ้า s[i] ='w' ให้เพิ่มจำนวน[2]ขึ้น 1
- ถ้า s[i] ='g' ให้เพิ่มจำนวน[8] ขึ้น 1
- ถ้า s[i] ='x' ให้เพิ่มจำนวน[6] ขึ้น 1
- ถ้า s[i] ='v' ให้เพิ่มจำนวน[5] ขึ้น 1
- ถ้า s[i] ='o' ให้เพิ่มจำนวน[1] ขึ้น 1
- ถ้า s[i] ='s' ให้เพิ่มจำนวน[7] ขึ้น 1
- ถ้า s[i] ='f' ให้เพิ่มจำนวน[4] ขึ้น 1
- ถ้า s[i] ='h' ให้เพิ่มจำนวน[3] ขึ้น 1
- ถ้า s[i] ='i' ให้เพิ่มจำนวน[9] ขึ้น 1
- นับ[7] :=นับ[7] – นับ[6]
- นับ[5] :=นับ[5] – นับ[7]
- นับ[4] :=นับ[4] – นับ[5]
- นับ[1] :=นับ[1] – (นับ[2] + นับ[4] + นับ[0])
- นับ[3] :=นับ[3] – นับ[8]
- นับ[9] :=นับ[9] – (นับ[5] + นับ[6] + นับ[8])
- สำหรับฉันในช่วง 0 ถึง 9 ทำ
- สำหรับ j ในช่วง 0 เพื่อนับ[i]
- ans :=ans + อักขระของ (i + '0')
- สำหรับ j ในช่วง 0 เพื่อนับ[i]
- คืนสินค้า
ตัวอย่าง(C++)
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: string originalDigits(string s) { string nums[]= {"zero", "one", "two", "three", "four", "five", "six", "seven","eight", "nine"}; vector <int> cnt(10); string ans = ""; int n = s.size(); for(int i = 0; i < n; i++){ if(s[i] == 'z')cnt[0]++; if(s[i] == 'w') cnt[2]++; if(s[i] == 'g')cnt[8]++; if(s[i] == 'x')cnt[6]++; if(s[i] == 'v')cnt[5]++; if(s[i] == 'o')cnt[1]++; if(s[i] == 's')cnt[7]++; if(s[i] == 'f')cnt[4]++; if(s[i] == 'h')cnt[3]++; if(s[i] == 'i') cnt[9]++; } cnt[7] -= cnt[6]; cnt[5] -= cnt[7]; cnt[4] -= cnt[5]; cnt[1] -= (cnt[2] + cnt[4] + cnt[0]); cnt[3] -= cnt[8]; cnt[9] -= (cnt[5] + cnt[6] + cnt[8]); for(int i = 0; i < 10; i++){ for(int j = 0; j < cnt[i]; j++){ ans += (char)(i + '0'); } } return ans; } }; main(){ Solution ob; cout << ob.originalDigits("fviefuro"); }
อินพุต
"fviefuro"
ผลลัพธ์
"45"