- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

# Lexicographic rank of a Binary String

In this article, we will explore an intriguing problem that involves binary strings and lexicographic ordering. Our task is to find the lexicographic rank of a given binary string. We'll demonstrate our solution using C++, a popular programming language known for its efficiency and flexibility.

## Understanding Lexicographic Ordering

Lexicographic or lexicographical ordering (also known as alphabetical or dictionary ordering) refers to the arrangement of words based on the alphabetical order of their component letters.

## Problem Statement

Given a binary string, we need to determine its lexicographic rank among all its permutations. The lexicographic rank of a string is its position in the set of all permutations of that string when they are listed in lexicographic order.

## Solution Approach

Our approach involves these key steps −

**Initialize Count**− Initialize a counter to store the number of ones ('1's) in the binary string.**Rank Calculation**− Iterate through the binary string from left to right. If the current character is '1', calculate its rank using the combination formula, decreasing the counter for each subsequent '1'.**Return Result**− The result will be the lexicographic rank of the binary string.

## C++ Implementation

### Example

The following C++ code outlines our solution −

#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; }

### Output

Lexicographic rank of the binary string: 3

## Explanation

Consider the binary string −

str = "110"

The permutations of this binary string are: "011", "101", "110". In lexicographic order, these permutations are: "011", "101", "110".

The rank of the binary string "110" is 3, which is the output of our program.

## Conclusion

The problem of finding the lexicographic rank of a binary string is a fascinating one that builds upon our understanding of binary strings, permutations, and lexicographic order. This solution, implemented in C++, demonstrates how we can use basic programming constructs to solve it effectively.