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
广告