在本文中,我們將探討一個涉及二進位字串和字典序的有趣問題。我們的任務是找到給定二進位字串的字典序排名。我們將使用C 來演示我們的解決方案,C 是一種以其高效性和靈活性而聞名的流行程式語言。
字典順序(也稱為字母順序或字典順序)是指根據單字的組成字母的字母順序排列單字。
給定一個二進位字串,我們需要確定它在所有排列中的字典序排名。字串的字典序排名是當它們按字典序列出時,該字串在所有排列集合中的位置。
我們的方法包含以下關鍵步驟−
初始化計數 − 初始化一個計數器來儲存二進位字串中的'1'的數量。
#排名計算 − 從左到右迭代遍歷二進位字串。如果當前字元為'1',使用組合公式計算其排名,並對每個後續的'1'遞減計數器。
#傳回結果− 結果將是二進位字串的字典順序。
下面的C 程式碼概述了我們的解決方案−
#include <bits/stdc++.h> using namespace std; // Function to calculate factorial int fact(int n) { int res = 1; for (int i = 1; i <= n; i++) res *= i; return res; } // Function to find lexicographic rank of a binary string int lexRank(string str) { int rank = 1; int onesCount = count(str.begin(), str.end(), '1'); for (char c : str) { if (c == '1') { onesCount--; rank += fact(onesCount); } } return rank; } int main() { string str = "110"; int result = lexRank(str); cout << "Lexicographic rank of the binary string: " << result << endl; return 0; }
Lexicographic rank of the binary string: 3
考慮二進位字串 −
str = "110"
這個二進位字串的排列組合有:"011","101","110"。按字典順序排列,這些排列組合是:"011","101","110"。
二進位字串"110"的排名是3,這是我們程式的輸出。
找到一個二進位字串的字典序排名的問題是一個非常有趣的問題,它建立在我們對二進位字串、排列和字典序的理解之上。這個用C 實現的解決方案展示了我們如何使用基本的程式結構來有效地解決這個問題。
以上是二進位字串的字典序排名的詳細內容。更多資訊請關注PHP中文網其他相關文章!