C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の最小文字列


同じ長さの2つの文字列sとtがあり、両方とも小文字であるとします。最初にsを任意の順序に再配置してから、sをtに変換するために必要な変更の最小数を数えることを検討してください。

したがって、入力がs ="eccynue"、t ="science"の場合、出力は「eccynue」を「yccence」に再配置したかのように2になり、yをsに置き換えます。 2番目のcはiで、「科学」になります。

これを解決するには、次の手順に従います-

  • ret:=0

  • sの頻度を保持する2つの配列cnt1とtの頻度を保持するcnt2を定義します

  • 初期化i:=0の場合、i <26の場合、更新(iを1増やします)、実行-

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

  • retを返す

理解を深めるために、次の実装を見てみましょう-

#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

  1. C++での最小の騎士の動き

    座標が-無限大から+無限大までの無限のチェス盤があり、正方形[0、0]に騎士がいるとします。騎士は、以下に示すように、8つの可能な動きをすることができます。それぞれの動きは、基本方向に2マス、次に直交方向に1マスです。 騎士を正方形[x、y]に移動するために必要な最小ステップ数を見つける必要があります。答えが存在することが保証されています。 したがって、入力がx=5およびy=5の場合、出力は4になります。これは[0,0]→[2,1]→[4,2]→[3,4]→[のようになります。 5,5] これを解決するには、次の手順に従います- マップを定義するm Solve()とい

  2. C ++で文字列をトークン化しますか?

    最初の方法は、文字列ストリームを使用して、スペースで区切られた単語を読み取ることです。これは少し制限されていますが、適切なチェックを提供すれば、タスクはかなりうまくいきます。 例 #include <vector> #include <string> #include <sstream> using namespace std; int main() {    string str("Hello from the dark side");    string tmp; // A string