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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP