Convert all substrings of length 'k' from base 'b' to decimal
Last Updated :
14 Mar, 2023
A string defining a valid number is given. Output all the base conversions of substrings of length 'k' from base 'b' to base 10.
Examples:
Input : str = "12212",
k = 3, b = 3.
Output : 17 25 23
Explanation :
All the substrings of length 'k' are : 122, 221, 212.
Base conversion can be computed using the formula.
Naive approach: A simple approach is to use a simple base conversion technique. For a base b number str, its decimal equivalent is str[0]*b0 + str[1]*b1 + str[2]*b2 + ... + str[n-1]*bn-1
Follow the below steps to implement the above idea:
- Define the substringConversions function that takes a string str, an integer k (substring length), and an integer b (target base) as input.
- For each substring of length k in str:
a. Extract the substring and save it in the variable sub.
b. Evaluate the decimal value of sub by iterating over each character in sub from right to left:
i. Convert the character to its corresponding digit value using sub.at(i) - '0'.
ii. Multiply the digit value by the base raised to the power of its position in the substring, starting from 0 (i.e., the rightmost digit has a power of 0).
iii. Add the result of step ii to a running total sum.
c. Print the final value of sum for the current substring. - End the substringConversions function.
Below is the implementation of the above approach:
C++
// Simple C++ program to convert all substrings from
// decimal to given base.
#include <bits/stdc++.h>
using namespace std;
int substringConversions(string str, int k, int b)
{
for (int i=0; i + k <= str.size(); i++)
{
// Saving substring in sub
string sub = str.substr(i, k);
// Evaluating decimal for current substring
// and printing it.
int sum = 0, counter = 0;
for (int i = sub.size() - 1; i >= 0; i--)
{
sum = sum + ((sub.at(i) - '0') * pow(b, counter));
counter++;
}
cout << sum << " ";
}
}
// Driver code
int main()
{
string str = "12212";
int b = 3, k = 3;
substringConversions(str, b, k);
return 0;
}
Java
// Simple Java program to convert all substrings from
// decimal to given base.
class GFG
{
static void substringConversions(String str, int k, int b)
{
for (int i=0; i + k <= str.length(); i++)
{
// Saving substring in sub
String sub = str.substring(i, i+k);
// Evaluating decimal for current substring
// and printing it.
int sum = 0, counter = 0;
for (int j = sub.length() - 1; j >= 0; j--)
{
sum = (int) (sum + ((sub.charAt(j) - '0') *
Math.pow(b, counter)));
counter++;
}
System.out.print(sum + " ");
}
}
// Driver code
public static void main(String[] args)
{
String str = "12212";
int b = 3, k = 3;
substringConversions(str, b, k);
}
}
// This code is contributed by 29AjayKumar
Python3
# Simple Python3 program to convert
# all substrings from decimal to given base.
import math
def substringConversions(s, k, b):
l = len(s);
for i in range(l):
if((i + k) < l + 1):
# Saving substring in sub
sub = s[i : i + k];
# Evaluating decimal for current
# substring and printing it.
sum, counter = 0, 0;
for i in range(len(sub) - 1, -1, -1):
sum = sum + ((ord(sub[i]) - ord('0')) *
pow(b, counter));
counter += 1;
print(sum , end = " ");
# Driver code
s = "12212";
b, k = 3, 3;
substringConversions(s, b, k);
# This code is contributed
# by Princi Singh
C#
// Simple C# program to convert all substrings from
// decimal to given base.
using System;
class GFG
{
static void substringConversions(String str, int k, int b)
{
for (int i = 0; i + k <= str.Length; i++)
{
// Saving substring in sub
String sub = str.Substring(i, k);
// Evaluating decimal for current substring
// and printing it.
int sum = 0, counter = 0;
for (int j = sub.Length - 1; j >= 0; j--)
{
sum = (int) (sum + ((sub[j] - '0') *
Math.Pow(b, counter)));
counter++;
}
Console.Write(sum + " ");
}
}
// Driver code
public static void Main(String[] args)
{
String str = "12212";
int b = 3, k = 3;
substringConversions(str, b, k);
}
}
/* This code is contributed by PrinciRaj1992 */
JavaScript
<script>
// Simple Javascript program to convert
// all substrings from decimal to given base.
function substringConversions(str, k, b)
{
for(let i = 0; i + k <= str.length; i++)
{
// Saving substring in sub
let sub = str.substring(i, i+k);
// Evaluating decimal for current substring
// and printing it.
let sum = 0, counter = 0;
for(let j = sub.length - 1; j >= 0; j--)
{
sum = (sum + ((sub[j].charCodeAt(0) -
'0'.charCodeAt(0)) *
Math.pow(b, counter)));
counter++;
}
document.write(sum + " ");
}
}
// Driver code
let str = "12212";
let b = 3, k = 3;
substringConversions(str, b, k);
// This code is contributed by patel2127
</script>
Time Complexity : O(n*k)
Auxiliary Space: O(n)
Efficient approach (Using sliding window): We can use Sliding Window technique to solve it in linear time. Every time we slide the window, we will subtract the weight of first element i.e. (element * pow(b, k-1) ). Now multiplying the previous sum with 'b' will increase weight of every element 3 times which is required. Also we will simply add the new element in window because its weight will be element * pow(b, 0).
Below is the implementation :
C++
// Efficient C++ program to convert all substrings from
// decimal to given base.
#include <bits/stdc++.h>
using namespace std;
int substringConversions(string str, int k, int b)
{
int i = 0, sum = 0, counter = k-1;
// Computing the decimal of first window
for (i; i < k; i++)
{
sum = sum + ((str.at(i) - '0') * pow(b, counter));
counter--;
}
cout << sum << " ";
// prev stores the previous decimal
int prev = sum;
// Computing decimal equivalents of all other windows
sum = 0, counter = 0;
for (i; i < str.size(); i++)
{
// Subtracting weight of the element pushed out of window
sum = prev - ((str.at(i - k) - '0') * pow(b, k-1));
// Multiplying the decimal by base to formulate other window
sum = sum * b;
// Adding the new element of window to sum
sum = sum + (str.at(i) - '0');
// Decimal of current window
cout << sum << " ";
// Updating prev
prev = sum;
counter++;
}
}
// Driver code
int main()
{
string str = "12212";
int b = 3, k = 3;
substringConversions(str, b, k);
return 0;
}
Java
// Efficient Java program to convert
// all substrings from decimal to given base.
import java.util.*;
class GFG
{
static void substringConversions(String str,
int k, int b)
{
int i = 0, sum = 0, counter = k-1;
// Computing the decimal of first window
for (i = 0; i < k; i++)
{
sum = (int) (sum + ((str.charAt(i) - '0') *
Math.pow(b, counter)));
counter--;
}
System.out.print(sum + " ");
// prev stores the previous decimal
int prev = sum;
// Computing decimal equivalents of all other windows
sum = 0; counter = 0;
for (; i < str.length(); i++)
{
// Subtracting weight of the element
// pushed out of window
sum = (int) (prev - ((str.charAt(i - k) - '0') *
Math.pow(b, k - 1)));
// Multiplying the decimal by base
// to formulate other window
sum = sum * b;
// Adding the new element of window to sum
sum = sum + (str.charAt(i) - '0');
// Decimal of current window
System.out.print(sum + " ");
// Updating prev
prev = sum;
counter++;
}
}
// Driver code
public static void main(String[] args)
{
String str = "12212";
int b = 3, k = 3;
substringConversions(str, b, k);
}
}
// This code is contributed by Rajput-Ji
Python3
# Simple Python3 program to convert all
# substrings from decimal to given base.
import math as mt
def substringConversions(str1, k, b):
for i in range(0, len(str1) - k + 1):
# Saving substring in sub
sub = str1[i:k + i]
# Evaluating decimal for current
# substring and printing it.
Sum = 0
counter = 0
for i in range(len(sub) - 1, -1, -1):
Sum = (Sum + ((ord(sub[i]) - ord('0')) *
pow(b, counter)))
counter += 1
print(Sum, end = " ")
# Driver code
str1 = "12212"
b = 3
k = 3
substringConversions(str1, b, k)
# This code is contributed by
# Mohit Kumar 29
C#
// Efficient C# program to convert
// all substrings from decimal to given base.
using System;
class GFG
{
static void substringConversions(String str,
int k, int b)
{
int i = 0, sum = 0, counter = k-1;
// Computing the decimal of first window
for (i = 0; i < k; i++)
{
sum = (int) (sum + ((str[i] - '0') *
Math.Pow(b, counter)));
counter--;
}
Console.Write(sum + " ");
// prev stores the previous decimal
int prev = sum;
// Computing decimal equivalents
// of all other windows
sum = 0; counter = 0;
for (; i < str.Length; i++)
{
// Subtracting weight of the element
// pushed out of window
sum = (int) (prev - ((str[i - k] - '0') *
Math.Pow(b, k - 1)));
// Multiplying the decimal by base
// to formulate other window
sum = sum * b;
// Adding the new element of window to sum
sum = sum + (str[i] - '0');
// Decimal of current window
Console.Write(sum + " ");
// Updating prev
prev = sum;
counter++;
}
}
// Driver code
public static void Main(String[] args)
{
String str = "12212";
int b = 3, k = 3;
substringConversions(str, b, k);
}
}
// This code is contributed by Princi Singh
JavaScript
<script>
// Efficient Javascript program to convert
// all substrings from decimal to given base.
function substringConversions(str, k, b)
{
let i = 0, sum = 0, counter = k-1;
// Computing the decimal of first window
for(i = 0; i < k; i++)
{
sum = (sum + ((str[i].charCodeAt(0) -
'0'.charCodeAt(0)) *
Math.pow(b, counter)));
counter--;
}
document.write(sum + " ");
// prev stores the previous decimal
let prev = sum;
// Computing decimal equivalents of
// all other windows
sum = 0; counter = 0;
for(; i < str.length; i++)
{
// Subtracting weight of the element
// pushed out of window
sum = (prev - ((str[i - k].charCodeAt(0) -
'0'.charCodeAt(0)) *
Math.pow(b, k - 1)));
// Multiplying the decimal by base
// to formulate other window
sum = sum * b;
// Adding the new element of window to sum
sum = sum + (str[i].charCodeAt(0) -
'0'.charCodeAt(0));
// Decimal of current window
document.write(sum + " ");
// Updating prev
prev = sum;
counter++;
}
}
// Driver code
let str = "12212";
let b = 3, k = 3;
substringConversions(str, b, k);
// This code is contributed by unknown2108
</script>
Time Complexity: O(n)
Auxiliary Space: O(n)
Similar Reads
Convert from any base to decimal and vice versa
Given a number and its base, convert it to decimal. The base of number can be anything such that all digits can be represented using 0 to 9 and A to Z. The value of A is 10, the value of B is 11 and so on. Write a function to convert the number to decimal. Examples: Input number is given as string a
15+ min read
Convert to a string that is repetition of a substring of k length
Given a string, find if it is possible to convert it to a string that is the repetition of a substring with k characters. To convert, we can replace one substring of length k starting at index i (zero-based indexing) such that i is divisible by K, with k characters. Examples: Input: str = "bdac", k
7 min read
Convert Decimal to Other Bases in Python
Given a number in decimal number convert it into binary, octal and hexadecimal number. Here is function to convert decimal to binary, decimal to octal and decimal to hexadecimal. Examples: Input : 55 Output : 55 in Binary : 0b110111 55 in Octal : 0o67 55 in Hexadecimal : 0x37 Input : 282 Output : 28
2 min read
Count of substrings of length K with exactly K-1 distinct characters
Given a string consisting of lowercase characters and an integer k, the task is to count all substrings of length k which have exactly k-1 distinct characters.Example:Input: s = "abcc", k = 2 Output: 1Explanation: Substrings of length 2 are "ab", "bc" and "cc". Only "cc" has 2-1 = 1 distinct charact
7 min read
Convert a number from base A to base B
Given two positive integers A and B and a string S of size N, denoting a number in base A, the task is to convert the given string S from base A to base B. Examples: Input: S = "10B", A = 16, B = 10Output: 267Explanation: 10B in hexadecimal (base =16) when converted to decimal (base =10) is 267. Inp
11 min read
Length of longest substring having all characters as K
Given a string S and a character K. The task is to find the length of the longest substring of S having all characters the same as character K. Examples: Input: S = "abcd1111aabc", K = '1' Output: 4 Explanation: 1111 is the largest substring of length 4. Input: S = "#1234#@@abcd", K = '@' Output: 2
8 min read
Convert decimal fraction to binary number
Given a fraction decimal number n and integer k, convert decimal number n into equivalent binary number up-to k precision after decimal point. Examples: Input: n = 2.47, k = 5Output: 10.01111Input: n = 6.986 k = 8Output: 110.11111100We strongly recommend that you click here and practice it, before m
9 min read
Convert a number from base 2 to base 6
Given a binary integer N, the task is to convert it into base 6. Note: The number of bits in N is up to 100. Examples: Input: N = "100111"Output: 103Explanation: The given integer (100111)2 is equivalent to (103)6. Input: N = "1111111"Output: 331 Approach: The given problem can be solved by first co
13 min read
Count of Substrings having Sum equal to their Length
Given a numeric string str, the task is to calculate the number of substrings with the sum of digits equal to their length. Examples: Input: str = "112112" Output: 6 Explanation: Substrings "1", "1", "11", "1", "1", "11" satisfy the given condition. Input: str = "1101112" Output: 12 Naive Approach:
8 min read
Counting even decimal value substrings in a binary string
Given a binary string of size N. Count all substring that have even decimal value considering binary to decimal conversion from left to right (For example a substring "1011" is treated as 13) Examples : Input : 101Output : 2Explanation : Substring are : 1, 10, 101, 0, 01, 1 In decimal form : 1, 1, 3
9 min read