สมมติว่าเรามีสตริง alphanumeric ตัวพิมพ์เล็ก s เราต้องแทนที่ทุกตัวอักษรที่ไม่ใช่ตัวเลขด้วยช่องว่าง แล้วเราจะได้จำนวนเต็มบางจำนวนที่คั่นด้วยช่องว่างอย่างน้อยหนึ่งช่อง หาจำนวนจำนวนเต็มที่ต่างกันหลังทำการแทนที่ สองตัวเลขถือว่าต่างกันถ้ารูปแบบทศนิยมโดยไม่มีศูนย์นำหน้าต่างกัน
เช่น s = "ab12fg012th5er67" ผลลัพธ์คือ 3 เพราะมีตัวเลข ["12", "012", "5", "67"] โดย "12" และ "012" ต่างกันในสตริงแต่เท่ากันเป็นจำนวนเต็ม ดังนั้นมี 3 ค่าที่ต่างกัน
ขั้นตอนการแก้ปัญหา
- nums = [], k = ""
- วนลูป i จาก 0 ถึง len(s)-1:
- ถ้า ASCII ของ s[i] อยู่ระหว่าง 48-57 (คือ '0'-'9'): k += s[i]
- มิฉะนั้น: ถ้า k ไม่ว่าง: ใส่ int(k) เข้า nums, k = ""
- ถ้า k ไม่ว่าง: ใส่ int(k) เข้า nums
- คืนค่าจำนวน unique ใน nums (len(set(nums)))
ตัวอย่างโค้ด
def solve(s):
nums = []
k = ""
for i in range(len(s)):
if ord(s[i]) > 47 and ord(s[i]) < 58:
k += s[i]
else:
if k != "":
nums.append(int(k))
k = ""
if k != "":
nums.append(int(k))
return len(set(nums))
s = "ab12fg012th5er67"
print(solve(s))
ข้อมูลเข้า
"ab12fg012th5er67"
ข้อมูลออก
3