เราได้รับสตริง str เป้าหมายคือการนับจำนวนสตริงย่อยใน str ที่มีอักขระแต่ละตัวเกิดขึ้นสูงสุด k ครั้ง ตัวอย่างเช่น หากอินพุตคือ "abc" และ k=1 สตริงย่อยจะเป็น "a", "b", "c", "ab", "bc", "abc"
ให้เราเข้าใจด้วยตัวอย่าง
ป้อนข้อมูล − str=”abaefgf”
ผลผลิต − จำนวนสตริงย่อยที่มีอักขระตัวแรกและตัวสุดท้ายเหมือนกันคือ &mmius; 9
คำอธิบาย − สตริงย่อยจะเป็น
“a”, “b”, “a”, “e” ,”f”, “g”, “f”, “aba”, “fgf”. Total 9.
ป้อนข้อมูล − str=”abcdef”
ผลผลิต − จำนวนสตริงย่อยที่มีอักขระตัวแรกและตัวสุดท้ายเหมือนกันคือ:6
คำอธิบาย − สตริงย่อยจะเป็น -
“a” , “b” , “c”, “d”, “e” ,”f”. Total 6
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
อาจมีหลายวิธีในการแก้ปัญหาที่กำหนด เช่น แนวทางไร้เดียงสาและแนวทางที่มีประสิทธิภาพ มาดูแนวทางไร้เดียงสากันก่อน เราจะส่งต่อสตริงย่อยทุกความยาวไปยังฟังก์ชัน check() หากสตริงย่อยนั้นเริ่มต้นและลงท้ายด้วยอักขระเดียวกัน ให้เพิ่มจำนวนขึ้น
-
ใช้สตริง str. คำนวณความยาวเป็น str.size()
-
การตรวจสอบฟังก์ชัน (สตริง str) รับสตริงย่อย str และตรวจสอบว่าอักขระตัวแรกและตัวสุดท้ายเหมือนกันหรือไม่ ( str[0]==str[length-1] ) ถ้าเป็นจริง ให้คืนค่า 1.
-
ฟังก์ชัน check_Start_End(string str, int length) รับ str และความยาวเป็นอินพุต และคืนค่าจำนวนสตริงย่อยของ str ที่ขึ้นต้นและลงท้ายด้วยอักขระเดียวกัน
-
นับเริ่มต้นเป็น 0
-
Traverse str โดยใช้ two for loops จาก i=0 ถึง i
-
เราจะได้ substrings ทั้งหมดโดยใช้ substr(i,j) ทุกความยาว ส่งผ่านแต่ละสตริงย่อยเพื่อตรวจสอบ () หากคืนค่า 1 ให้นับเพิ่มขึ้น
-
เมื่อสิ้นสุดการนับลูปทั้งสองจะมีสตริงย่อยของ str จำนวนหนึ่งที่มีอักขระเริ่มต้นและสิ้นสุดเหมือนกัน
-
ผลตอบแทนนับเป็นผลลัพธ์ที่ต้องการ
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; int count_k(string str, int len, int k){ int count = 0; int arr[26]; for (int i = 0; i < len; i++){ memset(arr, 0, sizeof(arr)); for (int j = i; j < len; j++){ arr[str[j] - 'a']++; if (arr[str[j] - 'a'] <= k) { count++; } else { break; } } } return count; } int main(){ string str = "bbddehj"; int k = 1; int length = str.length(); cout<<"Count of substrings with each character occurring at most k times are: "<<count_k(str, length, k); return 0; }
ผลลัพธ์
หากเรารันโค้ดด้านบน มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of substrings with each character occurring at most k times are: 14