首頁 > 後端開發 > C++ > 主體

檢查字串中的所有字元是否可以透過增加或減少來使其相等

WBOY
發布: 2023-09-11 11:25:02
轉載
851 人瀏覽過

檢查字串中的所有字元是否可以透過增加或減少來使其相等

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

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

範例範例

輸入– str = ‘aedb

輸出-str = ‘aedb

解釋 - ‘a’ 可以增加 2,‘e’ 可以減少 2。同時,‘b’ 可以增加 1,‘d’ 可以增加 1。因此,結果字串可以是 ‘cccc’。

輸入– str = ‘abd’

輸出-「否」

Explanation – 我們無法透過增加和減少操作來使字串的所有字元相等

輸入-‘g’

#輸出 - ‘是’

解釋 – 字串僅包含單一字符,因此所有字串字元已經相等

方法一

在這種方法中,我們將計算字串的字元總權重。字元的權重定義為‘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」個字元。

以上是檢查字串中的所有字元是否可以透過增加或減少來使其相等的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板