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.tw/cplusplus/cpp_strings.htm

https://tutorialspoint.tw/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 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.