在 C++ 中最多使用每个字符一次可以从另一个字符串形成的字符串计数
我们有两个字符串,即str1和str2,任务是计算可以完全从另一个字符串生成的字符串的数量,但我们可以使用一个字符来形成字符串。比如,我们将取两个字符串str1和str2并通过使用str1的字符恰好一次检查str1中str2的出现。
输入-str_1="技术学习",str_2="学习"
输出-可以使用每个字符最多一次从另一个字符串形成的字符串计数是-1
说明-正如我们所见,str_2只在str_1中出现一次。因此,str_2中str_1的计数为1。
输入-str_1=“elohsehelloabcoelhl,str_2=“你好”
输出-可以使用每个字符最多一次从另一个字符串形成的字符串计数是-3
说明-正如我们所见,str_2是hello,因此我们将使用str_1的字符检查一次单词hello的形成。正如我们所见,在str_1中有3种形式的hello,因此计数为3。
下面程序中使用的方法如下
输入字符串str_1和str_2并计算它们对应的长度并将数据传递给函数进行进一步处理。
声明一个临时变量count来存储str_1中str_2的计数,并用INT_MAX对其进行初始化。INT_MAX在C++中用于指定变量可以容纳的最大值,INT_MAX的值为+2147483647。
创建一个大小为26的数组,因为我们有26个英文字母,并将其初始化为0。
从0开始循环FOR直到字符串str_1的长度并将arr[str_1[i]-'a']设置为1
从0开始另一个循环FOR,直到字符串str_2的长度,并将计数设置为计数或arr[str_2[i]-'a']的最小值。
返回计数
打印结果。
示例
#includeusing namespace std; int atmost_once(string str_1, int len_str1, string str_2, int len_str2){ int count = INT_MAX; int arr[26] = { 0 }; for (int i = 0; i < len_str1 ; i++){ arr[str_1[i] - 'a'] += 1; } for (int i = 0; i < len_str2; i++){ count = min(count, arr[str_2[i] - 'a']); } return count; } int main(){ string str_1 = "technical learning"; int length_str1 = str_1.length(); string str_2 = "learning"; int length_str2 = str_2.length(); cout<<"Count of strings that can be formed from another string using each character at-most once are: "< 输出结果 如果我们运行上面的代码,它将生成以下输出-
Count of strings that can be formed from another string using each character at-most once are: 1