满足给定条件的字符串计数


简介

在 C++ 中,字符串也是一种基本数据类型,它由字母数字字符组成。字符串中的字母区分大小写,但字符串可以包含大写和小写字母。

在本文中,我们得到一个包含小写字符串的输入数组,需要计算数组中满足以下条件的字符串对的数量:

  • 两个字符串都应该具有相同的首尾元音。

  • 两个字符串都具有相同数量的元音对。

数组是一种模拟存储相似元素的数据结构。C++ 数组必须满足以下属性:

  • 数组中的所有元素都必须属于相同的数据类型。

  • 数组具有固定长度。

以下是一个关于所提问题的示例:

示例

示例 1 - arr : { “bitch” , “glitch” , “bitter”, “ditch”}

输出 - 1

解释 - 满足条件的字符串对是“bitch”和“glitch”,它们都包含元音{i}。这两个字符串的首尾元音都是'i',是等价的。“ditch”也满足条件,但它已经被包含在一个有效的对中了。

解决这个问题的方法是字符检查,然后在C++中维护一个元组来存储元音的计数。

语法

make_tuple ( val1, val2, val3..)

C++中的`make_tuple()`函数用于构造指定类型的元组对象。它用于将值赋给映射中的元组。值按声明顺序赋值。

参数

val1, val2 , .. - 要赋给映射中元组的值。

在评估此方法的过程中使用的另一种方法是:

push_back( val1)

内置的`push_back()`方法用于将元素插入C++数据对象,例如向量或映射。插入总是从末尾进行。每次插入后,对象的大小都会增加一。该方法在恒定时间复杂度内执行。

参数

val - 要插入到C++对象中的值。

算法

  • 将一个示例字符串数组 arr 作为输入。

  • 维护一个映射 map 来存储满足所需条件的单词元组。

  • 使用 for 循环 i 对 arr 进行迭代。

  • - 在每次迭代中,存储一个字符向量 vec 来跟踪从数组 arr 中获取的单词的元音。

  • 使用变量 word 引用数组中的特定单词。

  • 对提取的数组 word 执行另一个循环迭代 j。每次都从 word 中提取特定字符,并检查它是元音还是辅音。

  • 如果提取的字符是元音,则将其推入 vec 中。

  • 如果 vec 非空,即存在元音,则从当前单词 i 中提取首尾元音。

  • 使用提取的元音和第 i 个单词中的元音总数在映射中构造一个元组,然后将其映射到第 i 个索引。然后使用 `push_back()` 方法将创建的元组添加到映射的末尾。

  • 对映射进行迭代。

  • 计算可以使用映射中元组对形成的可能的对的数量。

  • 然后将对的数量作为输出返回,由变量 count 反映。

示例

下面的 C++ 代码片段说明了计算满足以下条件的字符串的过程:

Open Compiler
//include the required libraries #include <bits/stdc++.h> using namespace std; //count number of pairs satisfying the cond int satisfycondn(string sarr[], int n){ //declaring map to store tuples map<tuple<char, char, int>, vector<int> > map; // For every string of the array for (int i = 0; i < n; i++) { //storing vowels of the extracted word vector<char> vec; //extracting the word string word = sarr[i]; for (int j = 0; j < word.size(); j++) { char ch = sarr[i][j]; //checking if the character is vowel if (ch=='a' || ch=='e' || ch=='i' || ch=='o' || ch=='u') vec.push_back(ch); } int numvowels = vec.size(); // If current string contains vowels if (numvowels > 0) { int frstvowel = vec[0]; int scndvowel = vec[numvowels - 1]; map[make_tuple(frstvowel, scndvowel, numvowels)] .push_back(i); } } //maintaining a count to store the pair of strings satisfying the cond int count = 0; //iterating over the map for (auto m : map) { vector<int> v = m.second; //getting the valid pair of size int v_size = v.size(); //incrementing the counter count += v_size / 2; } return count; } int main() { //declaring a sample array string arr[] = { "point", "coin","groin","foul","area", "mourn" }; int n = sizeof(arr) / sizeof(string); cout << "Count of strings satisfying the condition : "<<satisfycondn(arr,n); return 0; }

输出

Count of strings satisfying the condition − 2

解释 - 数组中有两对字符串满足条件 - {point, coin} 和 {foul, mourn"}。

第一对字符串各有 2 个元音,分别是 o 和 i。

第二对字符串各有 2 个元音,分别是 o 和 u。

结论

C++ 中的映射是相当通用的数据结构,用于以更友好的方式存储数据及其关联属性。它简化了根据指定条件访问数据。

更新于:2023年7月31日

99 次查看

开启您的职业生涯

完成课程后获得认证

开始学习
广告