Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 문자열의 모든 부분 문자열에서 발생하는 모음의 수를 센다.

<시간/>

영어 알파벳을 포함하는 문자열 str이 주어집니다. 목표는 str의 모든 부분 문자열에서 발생하는 모음의 수를 찾는 것입니다. 문자열이 "abcde"이면 하위 문자열은 "a", "b", "c", "d", "e", "ab", "bc", "cd", "de", "abc", "bcd", "cde", "abcd", "bcde", "abcde". 이 부분 문자열의 모음 개수는 10입니다. (a 및 e)

예를 들어

입력

str = ”aloe”

출력

Count the number of vowels occurring in all the substrings of given string are:
14

설명

The substrings are:
“a”, “l”, “o”, “e”, “al”, “lo”, “oe”, “alo”, “loe”, “aloe”. Total vowels in these are: 14

입력

str=”http”

출력

Count the number of vowels occurring in all the substrings of given string are:
0

설명

The substrings are:
“h”, “t”, “t”, “p”, “ht”, “tt”, “tp”, “htt”, “ttp”, “http”. Total vowels in these are: 0

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다. -

이 접근 방식에서 우리는 vec[i]의 모든 부분 문자열에서 i번째 문자의 발생 횟수를 저장하는 벡터 vec를 만들 것입니다.

0번째 문자는 n 하위 문자열에서 발생하며 여기서 n은 문자열 str의 길이입니다.

i번째 문자는 그것을 포함하는 모든 부분 문자열에서 발생합니다( n−i ) + i번째 문자와 이전 문자를 포함하는 부분 문자열의 수( arr[ i−1 ] ) - 이전 문자로만 구성된 부분 문자열의 수( i ).

  • 문자열 str을 입력으로 사용합니다.

  • 함수 substring_vowels_count(string str, int length)는 str을 길이와 함께 취하여 주어진 문자열의 모든 부분 문자열에서 발생하는 모음의 개수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • 정수 벡터를 취합니다.

  • i−0에서 i

  • i=0인 경우 0번째 문자의 경우 이 개수는 길이입니다. push_back[length]을 사용하여 vec[0]=length를 설정합니다.

  • push_back(temp_1 + temp_2)을 사용하여 설정된 다른 모든 문자의 경우, 여기서 temp_1=length−1 및 temp_2=vec[i−1]−i입니다.

  • 이제 for 루프와 for 각 str[i]를 모음( a , e, i, o 또는 u )으로 사용하여 str을 다시 탐색합니다. vec[i]를 추가하여 계산합니다.

  • 마지막에 count의 부분 문자열에서 모음의 총 발생 횟수를 갖게 됩니다.

  • 결과로 카운트를 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int substring_vowels_count(string str, int length){
   int count = 0;
   vector<int> vec;
   for (int i = 0; i < length; i++){
      if (i == 0){
         vec.push_back(length);
      } else {
         int temp_1 = length − i;
         int temp_2 = vec[i − 1] − i;
         vec.push_back(temp_1 + temp_2);
      }
   }
   for (int i = 0; i < length; i++){
      if(str[i] == 'a' || str[i] == 'i' || str[i] == 'e' || str[i] == 'o' || str[i] == 'u'){
         count = count + vec[i];
      }
   }
   return count;
}
int main(){
   string str = "honesty";
   int length = str.length();
   cout<<"Count the number of vowels occurring in all the substrings of given string are: "<<substring_vowels_count(str, length);
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

Count the number of vowels occurring in all the substrings of given string are: 28