在 C++ 中计算单词数量,其中第 i 个字母是给定单词的第 (i-1) 个、第 i 个或第 (i+1) 个字母


给定一个字符串 str[] 作为输入。目标是从 str[] 中计算出与 str[] 长度相同的单词,并且字母位置满足以下条件:第 i 个字母被替换为第 (i-1) 个、第 i 个或第 (i+1) 个字母。

对于第一个字母,替换将来自第 i 个或第 i+1 个位置。

对于最后一个字母,替换将来自第 i-1 个或第 i 个位置。

让我们通过示例来理解。

输入 − str[] = “TPP”

输出 − 第 i 个字母是给定单词的第 (i-1) 个、第 i 个或第 (i+1) 个字母的单词数量为 - 4

解释 

Replacing T by T (i)th or 1st P (i+1)th = TPP, PPP
Replacing 1st P by T (i-1)th, P (i)th, or P(i+1)th = TTP, TPP, TPP
Replacing 2nd P by P(i-1)th or P(i)th = TPP, TPP
Unique combination of replacements: TPP, PPP, TTP, PTP

输入 − str = “aaa”

输出 − 第 i 个字母是给定单词的第 (i-1) 个、第 i 个或第 (i+1) 个字母的单词数量为:1

解释 

Replacing a by a (i)th or 2nd a (i+1)th = aaa, aaa
Replacing 2nd a by a (i-1)th, a (i)th, or a(i+1)th = aaa, aaa, aaa
Replacing 3rd a by a(i-1)th or a(i)th = aaa, aaa
Unique combination of replacements: aaa

下面程序中使用的方法如下

我们知道,对于每个字母,我们有三种可能性。如果对于当前字母 i,所有 (i-1)th、ith、(i+1)th 都是不同的,那么我们有 3 个选项。如果两个相同,我们有 2 个选项,如果全部相同,则只有一个选项。

因此,我们将遍历字符串并检查唯一性,并根据字母乘以 3、2 或 1。对于第一个和最后一个字母,我们将检查唯一性并以类似的方式乘以 2 或 1。

  • 将字符串 str[] 作为字符数组。

  • 函数 total(char str[], int length) 获取字符串并返回 str[] 中第 i 个字母是给定单词的第 (i-1) 个、第 i 个或第 (i+1) 个字母的单词数量。

  • 将初始计数设置为 1。str[] 中的单词本身。

  • 如果只有一个字母,长度将为 1,返回 1。

  • 检查索引 0 处的第一个字母。如果它与第二个相同,则 str[0]==str[1],则将计数乘以 1

  • 如果它们不同,则将计数乘以 2。

  • 现在使用 for 循环从索引 i=1 到 i<length-1 遍历从第二个字母到倒数第二个字符。

  • 对于索引 i 处的每个字母。检查 str[i] 是否与 str[i-1] 或 str[i+1] 相同。如果是,则将计数乘以 1。

  • 如果任意两个相同,则将计数乘以 2。

  • 否则将计数乘以 3。

  • 对于最后一个字符,检查 str[i-1]==str[i]。如果为真,则将计数乘以 1。否则乘以 2

  • 最后,我们将获得这些不同单词的计数。

  • 返回计数作为结果。

示例

 在线演示

#include<bits/stdc++.h>
using namespace std;
int total(char str[], int length){
   int count = 1;
   if (length == 1){
      return count;
   }
   if (str[0] == str[1]){
      count = count * 1;
   }
   else{
      count = count * 2;
   }
   for (int j=1; j<length-1; j++){
      if (str[j] == str[j-1] && str[j] == str[j+1]){
         count = count * 1;
      }
      else if (str[j] == str[j-1]){
         count = count * 2;
      }
      else if(str[j] == str[j+1]){
         count = count * 2;
      }
      else if(str[j-1] == str[j+1]){
         count = count * 2;
      }
      else{
         count = count * 3;
      }
   }
   if (str[length - 1] == str[length - 2]){
      count = count * 1;
   }
   else{
      count = count * 2;
   }
   return count;
}
int main(){
   char str[] = "TPP";
   int length = strlen(str);
   cout<<"Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word
are: "<<total(str, length) << endl;
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出 -

Count of words whose i-th letter is either (i-1)-th, i-th, or (i+1)-th letter of given word are: 4

更新于: 2020-12-02

144 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告