首頁 >後端開發 >C++ >根據給定條件,將以下內容翻譯成中文:根據給定條件,刪除字元以獲得空字串的索引總和

根據給定條件,將以下內容翻譯成中文:根據給定條件,刪除字元以獲得空字串的索引總和

WBOY
WBOY轉載
2023-09-02 15:29:061352瀏覽

根據給定條件,將以下內容翻譯成中文:根據給定條件,刪除字元以獲得空字串的索引總和

與字串操作相關的概念,例如為獲得空字串而刪除的字元索引之和,經常在程式設計挑戰和競賽中使用。然後使用消除的字元索引總和計算結果。

刪除字元的索引總和以獲得空字串是字串操作中的一個實用想法,可用於解決各種程式設計困難和挑戰。

問題處理

我們必須先理解問題陳述和給定的標準,以找到消除以產生空字串的字元索引總數。

給定字串 S,目標是確定可以從 S 中刪除的字元總數,同時仍保留字串為空。例如,如果S =“code”,則可以消除位置0、4、5和6處的字元以獲得空字串。這些指數加起來為 0 4 5 6 = 15。

但是,使用堆疊是解決此問題的典型策略。我們可以循環遍歷字串S並確定每次迭代是否可以刪除每個字元。如果可以刪除它的索引,我們可以將其新增到堆疊中。如果無法刪除它,我們可以看看是否可以將堆疊頂部的字元與現有的字元一起刪除。如果可以消除,我們將這樣做並將其索引與當前字元的索引相加。可以重複此過程,直到處理完字串中的所有字元。

以下偽代碼舉例說明了該策略 -

stack = []
sum = 0
for k in range(len(S)):
   if stack and S[k] == S[stack[-1]]:
      stack.pop()
      sum += k + stack[-1] if stack else k
   else:
      stack.append(k)
return sum

在此偽代碼中,sum 變數和空堆疊都初始化為 0。然後使用 for 迴圈重複遍歷字串 S。檢查每個字符,看看它是否可以與頂部的字符一起刪除。堆棧,如果堆疊不為空。如果可以的話,該角色將從堆疊中刪除,並將其索引和遊戲中的角色的總和添加到 sum 變數中。在這種情況下,我們將其索引新增至堆疊中並嘗試將其刪除。然後我們回傳 sum 變數。

此方法的時間複雜度和空間複雜度均為 O(n),其中 n 是字串 S 的長度,n 是可以從 S 中刪除的最大字元數。

文法

用於確定根據指定條件建立空字串而消除的字元索引總數的 C 語法如下 -

說明

  • 我們首先取得使用者輸入的字串。

  • 我們將 n 的起始值設定為字串的長度 str。

  • 接下來,我們將 cnt 初始化為 0,這將計算字元「U」的出現次數。

  • 我們將 sum 的初始值設為 0,它將儲存消除的字元索引的總數。

  • 之後,我們循環遍歷 str,檢查每個字符,如下所示 -

    • 如果字元是“U”,我們提高 cnt 並將總和增加 (n - i - 1) 2 * cnt。

    • 如果字元不是“U”,我們透過新增 i 2 * cnt 來增加總和。

  • 最後,我們輸出 sum 的值。

注意 - 由於該問題的具體情況沒有明確說明,因此假定使用了這些條件。

{
   string str;
   cin >> str;

   int n = str.size();
   int cnt = 0, sum = 0;
   for (int k = 0; i < n; k++) {
      if (str[k] == 'U') {
         sum += (n - k - 1) + 2 * cnt;
         cnt++;
      } else {
         sum += k + 2 * cnt;
      }
   }
   cout << sum << endl;
}

演算法

一種 C 演算法,用於計算在定義的條件下創建空字串而消除的字元索引總數 -

  • 第 1 步 - 首先,定義一個字串變數並輸入使用者提供的字串。

  • 第 2 步 - 建立一個堆疊來保存字串的字元。

  • 第 3 步 - 輸入字串逐個字元循環。

  • 第 4 步 - 如果目前字元為空,則將其推入堆疊。

  • 第 5 步 - 如果目前字元和堆疊頂部字元相同,則從堆疊中彈出頂部字元。

  • 第 6 步 - 如果目前字元與堆疊頂部的字元不同,則將其推入堆疊。

  • 第 7 步 - 只有無法擦除的字元才會保留在循環後的堆疊中。

  • 第 8 步 - 新增仍在堆疊中的字元索引。

  • 第 9 步 - 顯示索引總數。

遵循的方法

方法1

使用以下條件計算字元刪除索引的總和以產生空字串 -

在此範例中,字串「abacbdc」用作輸入。程式碼使用兩個索引 i 和 j 來從頭到尾遍歷字串。從字串中刪除字元的條件如下:

如果 s[i] 和 s[j] 相等,則將兩個索引移到字串的中心。

  • 如果 s[i] 小於 s[j],則刪除索引 j 處的字符,並將索引總和增加索引 i 1。

  • 如果 s[i] 大於 s[j],則刪除索引 i 處的字符,並將索引總和增加索引 j 1。

在消除所有字元後,將索引總數報告給控制台。

請記住,這只是說明,字元刪除的要求可能會根據問題的性質而變化。

示例 1

#include <iostream>
#include <string>

using namespace std;

int main() {
   string s = "abacbdc";
   int sum = 0;
   int i = 0;
   int j = s.length() - 1;
   while (i < j) {
      if (s[i] == s[j]) {
         i++;
         j--;
      } else if (s[i] < s[j]) {
         sum += i + 1;
         i++;
         s.erase(j, 1);
         j--;
      } else {
         sum += j + 1;
         j--;
         s.erase(i, 1);
         i++;
      }
   }
   cout << "Sum of indices of characters removed: " << sum << endl;
   return 0;
}

输出

Sum of indices of characters removed: 6

方法2

str 字符串和字符是 sum_of_indices 函数的输入。然后,迭代字符串,确定每个字符是否等于 c。如果是这样,函数会递减循环索引以考虑删除的字符,并将字符的索引添加到运行总数中,然后使用擦除技术从字符串中删除字符。然后该函数返回已消除的字符索引的总数。

示例字符串 str 和字符 c 在 main 函数中定义,这两个输入用于调用 sum_of_indices 函数。总数作为结果打印到控制台。

示例 2

#include <iostream>
#include <string>
using namespace std;
int sum_of_indices(string str, char c) {
   int sum = 0;
   for (int i = 0; i < str.length(); i++) {
      if (str[i] == c) {
         sum += i;
         str.erase(i, 1);
         i--;
      }
   }
   return sum;
}
int main() {
   string str = "abcbcdc";
   char c = 'c';
   int sum = sum_of_indices(str, c);
   cout << "Sum of indices of characters removed to obtain empty string: " << sum << endl;
   return 0;
}

输出

Sum of indices of characters removed to obtain empty string: 9

结论

需要操作字符串及其索引来解决根据提供的条件计算消除的字符索引之和以获得空字符串的问题。为了解决这个问题,循环遍历字符串,如果两个连续字符相同,则在更新索引之前删除它们。一旦我们有了一个空字符串,我们就可以添加被删除的字符的索引以产生一个空字符串。

有许多解决方案需要解决,例如利用堆栈或队列来跟踪要删除的字符,或者使用递归来迭代地从字符串中删除字符。

以上是根據給定條件,將以下內容翻譯成中文:根據給定條件,刪除字元以獲得空字串的索引總和的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除