在C++中移除一個字元的所有出現後最小化ASCII值之和


假設我們有一個字串。我們需要在移除特定字元的所有出現後,最小化字串中每個字元的ASCII值之和。例如,給定字串“hello”,其ASCII字元之和為(104 + 101 + 108 + 108 + 111) = 532。現在檢查每個字元的出現次數。

  • h出現一次,所以成本是1 * 104 = 104
  • e出現一次,所以成本是1 * 101 = 101
  • l出現兩次,所以成本是2 * 108 = 216
  • o出現一次,所以成本是1 * 111 = 111

這裡l出現的次數最多,所以如果我們移除所有l的出現,則值將最小化。實際上,我們從上面的列表中移除最大值。最終結果將是532 – 216 = 316

邏輯很簡單,首先我們需要計算字串的ASCII值之和。然後計算字串中每個字元的頻率,然後移除貢獻最大值(出現次數 * ASCII值)的字元。減去的值就是結果。

示例

#include <iostream>
using namespace std;
int minASCIISum(string str, int len) {
   int max_val = INT_MIN, sum = 0;
   int frequency[26] = { 0 };
   for (int i = 0; i < len; i++) {
      frequency[str[i] - 'a']++;
      sum += (int)str[i];
   }
   for (int i = 0; i < 26; i++)
   max_val = max(max_val, frequency[i] * (i + 'a'));
   return (sum - max_val);
}
int main() {
   string str = "hello";
   int n = str.length();
   cout << "Minimized Sum: " << minASCIISum(str, n);
}

輸出

Minimized Sum: 316

更新於:2019年10月21日

102 次瀏覽

開啟你的職業生涯

完成課程獲得認證

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