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

C ++を使用して、指定された文字列の最初の一意の文字のインデックスを検索します


文字列「s」が与えられた場合、タスクは、与えられた文字列で繰り返されていない最初の一意の文字を見つけ、そのインデックスを出力として返すことです。指定された文字列にそのような文字が存在しない場合、出力として「-1」が返されます。たとえば、

入力-1

s = “tutorialspoint”

出力

1

説明 −指定された文字列「tutorialspoint」で、繰り返されていない最初の一意の文字は、インデックス「1」を持つ「u」です。したがって、出力として「1」を返します。

入力-2

s = “aaasttarrs”

出力

-1

説明 −指定された文字列「aaasttarrs」には、一意の文字はありません。したがって、出力を「-1」として返します。

この問題を解決するために使用されるアプローチ

指定された文字列に存在する最初の一意の文字のインデックスを見つけるには、ハッシュマップを使用できます。 。アイデアは、文字列のすべての文字を調べて、文字としてKeyを、出現としてValueを使用してハッシュマップを作成することです。

文字列の各文字をトラバースしているときに、各文字の出現箇所が表示された場合はそれを保存します。各文字の出現を保存するには、O(n)線形時間がかかります。次に、ハッシュマップを調べて、頻度が2未満または「1」に等しい文字があるかどうかを確認します。そして、その特定の文字のインデックスを返します。

  • 文字列「s」を入力として受け取ります。

  • 整数関数uniqueChar(string str)は、文字列を入力として受け取り、最初に出現する一意の文字のインデックスを返します。

  • 文字列を繰り返し処理し、文字列の各文字を調べながら、charとその出現のハッシュマップを作成します。

  • 頻度が2未満または1に等しい文字がある場合は、その特定の文字のインデックスを返します。

  • 文字列に一意の文字が含まれていない場合は、「-1」を出力として返します。

#include<bits/stdc++.h>
using namespace std;
int uniqueChar(string str){
   int ans = -1;
   unordered_map<char,int>mp;
   for(int i=0;str[i]!='\0'){
      mp[str[i]]++;
   }
   for(int i=0;i<s.size();i++){
      for(auto it= mp.begin();it!=mp.end();it++){
         if(it->first==str[i] && it->second==1){
            ans= i;
         }
      }
   }
   return ans;
}
int main(){
   string s= "tutorialspoint";
   cout<<uniqueChar(s)<<endl;
   return 0;
}

出力

上記のコードを実行すると、出力が次のように出力されます

1

説明 −入力文字列「tutorialspoint」には「u」、「r」、「l」などの一意の文字が含まれ、最初の一意の文字「u」にはインデックス「1」が含まれます。したがって、出力として「1」を取得します。


  1. C++を使用して文字列の部分文字列の数を見つける

    この記事では、特定の文字列に形成できるサブ文字列(空ではない)の数を見つけるためのアプローチについて学習します。 Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, ‘oo’, ‘on’, ‘moo’, ‘oon’ and &

  2. C ++を使用して、括弧の文字列から等しい点を見つけます。

    ここでは、括弧の文字列で等しいポイントを取得する方法を説明します。等しい点はインデックスIであり、その前の開始ブラケットの数は、その後の終了ブラケットの数と等しくなります。ブラケット文字列が「(()))(()()())))」のようなものであるとすると、よく見ると次のようになります したがって、0から9までの開始ブラケットの数は5であり、9から14までの終了ブラケットの数も5であるため、これは同じポイントです。 この問題を解決するには、次のいくつかの手順に従う必要があります- すべてのインデックスiまでの文字列に表示される開き角かっこの数を保存します すべてのインデックスIまでの文字