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

ความเป็นไปได้ของคำจากชุดอักขระที่กำหนดใน C++


ในปัญหานี้ เราเป็นสองสตริง str1 และ str2 งานของเราคือตรวจสอบว่าอักขระทั้งหมดของ str2 และแสดงอยู่ใน str1 หรือไม่

มาดูตัวอย่างทำความเข้าใจปัญหากัน

ป้อนข้อมูล

str1 = “Hello”
str2 = “Hell”

ผลผลิต − ใช่

คำอธิบาย - อักขระทั้งหมดของ str2 มีอยู่ใน str1

ในการแก้ปัญหานี้ วิธีแก้ไขง่ายๆ จะตรวจสอบอักขระแต่ละตัวของ str2 ใน str1 แล้วส่งคืนโซลูชัน

แต่เราต้องสร้างโซลูชันที่มีประสิทธิภาพ ดังนั้น เราจะใช้อาร์เรย์ความถี่ (ความยาว 256 สำหรับอักขระที่ถูกต้องทั้งหมด) จากนั้นข้ามผ่าน str1 และเพิ่มค่าในอาร์เรย์ความถี่ตามอักขระที่เกี่ยวข้องมากกว่าที่เกิดขึ้น จากนั้นเราจะสำรวจ str2 ซึ่งจะลดความถี่อาร์เรย์เมื่อเกิดขึ้น และในการทำซ้ำแต่ละครั้ง เราจะตรวจสอบด้วยว่าความถี่นี้เป็นลบหรือไม่ ถ้ามันเป็นไปไม่ได้ อย่างอื่นก็เป็นไปได้

ตัวอย่าง

โปรแกรมแสดงการใช้งานโซลูชันของเรา

#include <iostream>
#include <string.h>
using namespace std;
bool isPresent(string str1, string str2){
   int freq[256] = { 0 };
   for (int i = 0; i<str1.length(); i++)
      freq[str1[i]]++;
   for (int i=0;i<str2.length(); i++) {
         if (freq[str2[i]] < 1)
            return false;
   }
   return true;
}
int main() {
   string str1 = "tutorialspoint";
   string str2 = "point";
   cout<<"All charcters of '"<<str2<<"' are ";
   isPresent(str1,str2)?cout<<"present":cout<<"not present";
   cout<<" in '"<<str1<<"' ";
   return 0;
}

ผลลัพธ์

All charcters of 'point' are present in 'tutorialspoint'