# Convert all substrings of length ‘k’ from base ‘b’ to decimal

• Difficulty Level : Easy
• Last Updated : 15 Jul, 2022

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.```

Method 1 (Simple): A simple approach is to use simple base conversion technique. For a base b number str, its decimal equivalent is str*b0 + str*b1 + str*b2 + … + str[n-1]*bn-1

Implementation:

## C++

 `// Simple C++ program to convert all substrings from` `// decimal to given base.` `#include ` `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

 ``

Output

`17 25 23 `

Time Complexity : O(n*k)
Auxiliary Space: O(n)

Method 2 (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 ` `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

 ``

Output

`17 25 23 `

Time Complexity: O(n)
Auxiliary Space: O(n)

This article is contributed by Aarti_Rathi and Rohit Thapliyal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up
Recommended Articles
Page :