C++程序:查找主歌曲中子歌的长度


假设我们有一个包含n个字符的字符串S和两个值l和r。Amal创作了一首歌并分享给了Bimal。这首歌是一个由小写英文字母组成的字符串。Bimal对这首歌提出了一个问题。这个问题是关于这首歌从索引l到r的子段。Bimal考虑一个由这段字符组成的子串,并将子段中每个字母重复k次,其中k是字母在字母表中的索引。例如,如果问题是关于子串“abbcb”,那么Bimal将字母'a'重复一次,每个字母'b'重复两次,字母'c'重复三次,这样得到的字符串是“abbbbcccbb”,其长度为10。Bimal对结果字符串的长度感兴趣。我们必须找到它。

问题类别

为了解决这个问题,我们需要操作字符串。编程语言中的字符串是存储在特定数组类型中的字符流。几种语言将字符串指定为特定数据类型(例如Java、C++、Python);而其他几种语言将字符串指定为字符数组(例如C)。字符串在编程中非常重要,因为它们通常是各种应用程序中首选的数据类型,并且用作输入和输出的数据类型。有各种字符串操作,例如字符串搜索、子串生成、字符串剥离操作、字符串转换操作、字符串替换操作、字符串反转操作等等。查看下面的链接,了解如何在C/C++中使用字符串。

https://tutorialspoint.com/cplusplus/cpp_strings.htm

https://tutorialspoint.com/cprogramming/c_strings.htm

因此,如果我们问题的输入类似于S = "abacaba";l = 1;r = 3,则输出将是4,因为Bimal取子串“aba”,转换为“abba”,所以答案是4。

步骤

为了解决这个问题,我们将遵循以下步骤:

sum := 0
Define an array a of size: 100009.
sum := 0
n := size of S
for initialize i := 1, when i <= n, update (increase i by 1), do:
   x := S[i - 1]
   sum := sum + (x - ASCII of 'a' + 1)
   a[i] := sum
return a[r] - a[l - 1]

示例

让我们看看下面的实现以更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(string S, int l, int r){
   int sum = 0;
   int a[100009];
   char x;
   sum = 0;
   int n = S.size();
   for (int i = 1; i <= n; i++){
      x = S[i - 1];
      sum += (x - 'a' + 1);
      a[i] = sum;
   }
   return a[r] - a[l - 1];
}
int main(){
   string S = "abacaba";
   int l = 1;
   int r = 3;
   cout << solve(S, l, r) << endl;
}

输入

"abacaba", 1, 3

输出

4

更新于:2022年4月8日

104 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告