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

สตริงขั้นต่ำใน C ++


สมมติว่าเรามีสตริง s และ t สองสตริงที่มีความยาวเท่ากัน และทั้งคู่เป็นตัวพิมพ์เล็ก พิจารณาว่าเราได้จัดเรียง s ใหม่เป็นลำดับใดก็ได้ จากนั้นนับจำนวนการเปลี่ยนแปลงขั้นต่ำที่จำเป็นในการเปลี่ยน s เป็น t

ดังนั้น หากอินพุตเป็น s ="eccynue", t ="science" ผลลัพธ์จะเป็น 2 ราวกับว่าเราจัดเรียง "eccynue" เป็น "yccence" ใหม่ จากนั้นแทนที่ y ด้วย s และ คที่สองกับ i มันจะเป็น "วิทยาศาสตร์"

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ยกเลิก :=0

  • กำหนดสองอาร์เรย์ cnt1 เพื่อเก็บความถี่ของ s และ cnt2 เพื่อเก็บความถี่ของ t

  • สำหรับการเริ่มต้น i :=0 เมื่อ i <26 อัปเดต (เพิ่ม i ขึ้น 1) ให้ทำ -

    • ret :=ret + max(cnt1[i] - cnt2[i], 0)

  • รีเทิร์น

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(string s, string t) {
      int ret = 0;
      vector <int> cnt1(26);
      vector <int> cnt2(26);
      for(int i = 0; i < s.size(); i++){
         cnt1[s[i] - 'a']++;
      }
      for(int i = 0; i < t.size(); i++){
         cnt2[t[i] - 'a']++;
      }
      for(int i = 0; i < 26; i++){
         ret += max(cnt1[i] - cnt2[i], 0);
      }
      return ret;
   }
};
int main(){
   Solution ob;
   cout << (ob.solve("eccynue", "science"));
}

อินพุต

"eccynue", "science"

ผลลัพธ์

2