ได้รับสตริงที่ประกอบด้วยตัวเลข 0-9 ซึ่งแทนค่าทศนิยม เป้าหมายคือหาจำนวนซับสตริงที่แทนค่าทศนิยมมากกว่า X โดยเงื่อนไขคือซับสตริงต้องไม่ขึ้นต้นด้วย 0 เช่นใน "2021" ซับสตริง "02", "021", "0" จะไม่นับ
ตัวอย่าง
อินพุต: str = "123", X = 12
เอาต์พุต: 2
คำอธิบาย: ซับสตริงที่ > 12 คือ 123 และ 23
อินพุต: str = "111", X = 100
เอาต์พุต: 1
คำอธิบาย: มีแค่ 111 ที่มากกว่า 100
แนวทางการแก้ปัญหา
- เก็บความยาวสตริงใน
len - สร้างฟังก์ชัน
greater_X(string str, int x)คืนค่าจำนวนซับสตริงที่มากกว่า X - วนลูป
forตัวแปรiจาก 0 ถึงlen-1(อ่านจากซ้ายไปขวา) - ถ้า
str[i] != '0'ทุกซับสตริงที่เริ่มจาก index นี้จะถูกต้อง - วนลูป
jจาก 1 ถึงi+j <= lenสำหรับความยาวซับสตริง - แปลงซับสตริง
str.substr(i, j)เป็นตัวเลขด้วยstoi()ถ้ามากกว่า X ให้เพิ่มตัวนับ
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int greater_X(string str, int x) {
int count = 0;
int len = str.length();
for (int i = 0; i < len; ++i) {
if (str[i] != '0') {
for (int j = 1; (i + j) <= len; ++j) {
if (stoi(str.substr(i, j)) > x) {
count++;
}
}
}
}
return count;
}
int main() {
string str = "987";
int x = 100;
cout << "Count of number of substrings with numeric value greater than X are: " << greater_X(str, x);
return 0;
}
ผลลัพธ์
Count of number of substrings with numeric value greater than X are: 1