檢查字串的所有字元是否可以透過增量或減量操作使其相等


在這個問題中,我們需要檢查是否可以透過增量和減量操作使字串的所有字元相等。我們可以根據每個字元的 ASCII 值獲得每個字元的權重,並檢查總權重是否可以用於使所有字元相等。

問題陳述 – 我們給定一個長度為 N 的字串 str,其中包含小寫字母字元。我們需要檢查是否可以透過選擇任意兩個字元,一個增加 1,另一個減少 1,來使字串的所有字元相等。如果可能,列印“yes”,否則列印“no”。

示例

輸入– str = ‘aedb

輸出 – str = ‘aedb

說明 – ‘a’ 可以增加 2,而 ‘e’ 可以減少 2。同樣,‘b’ 可以增加 1,而 ‘d’ 可以增加 1。因此,結果字串可以是 ‘cccc’。

輸入– str = ‘abd’

輸出 – ‘否’

說明 – 我們無法透過增量和減量操作使字串的所有字元相等

輸入– ‘g’

輸出 – ‘是’

說明 – 字串僅包含單個字元,因此所有字串字元都已相等

方法 1

在這種方法中,我們將計算字串字元的總權重。字元的權重定義為 ‘a’ = 1,‘b’ = 2,‘c’ = 3,…,‘z’ = 26。因此,如果我們將總權重除以字串的長度,我們可以說我們可以透過增加一個字元並減少另一個字元來使字串的所有字元相等。

演算法

  • 定義 ‘len’ 變數並使用 size() 方法儲存字串的大小。

  • 定義 ‘totalWeight’ 變數以儲存給定字串所有字元的總權重

  • 使用每個字元的 ASCII 碼獲取特定字元的權重並將其新增到 ‘totalWeight’ 變數中。

  • 如果 ‘totalWeight’ 的值為 ‘len’ 的倍數,則返回 true。否則,返回 false。

示例

#include <iostream>
using namespace std;

// function to check if all characters of a string can be made equal by incrementing or decrementing by 1
bool canMakeEqual(string str){
   int len = str.size();
   // store sum of ASCII values of characters
   int totalWeight = 0;
   // Iterate over the string
   for (int i = 0; i < len; i++){
      // get the ASCII value of each character
      totalWeight += str[i] - 'a' + 1;
   }
   return (totalWeight % len == 0);
}
int main(){
   string str = "aedb";
   if (canMakeEqual(str))
      cout << "Yes";
   else
      cout << "No";
   return 0;
}

輸出

Yes

時間複雜度 – O(N),因為我們遍歷了字串。

空間複雜度 – O(1),因為我們使用了常數空間。

結論

我們學習瞭如何檢查字串的所有字元是否可以透過增量和減量字元的 ASCII 值來使其相等。我們根據“總權重”解決了這個問題。使用者還可以嘗試找到結果字串。要找到結果字串,請找到相對於 (totalWeight / len) 的 ASCII 值,並在給定字串中新增 ‘len’ 個字元。

更新於: 2023年8月10日

155 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.