在這個問題中,我們需要檢查是否可以透過增加和減少操作來使字串的所有字元相等。我們可以根據字元的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中文網其他相關文章!