Find total number of non-empty substrings of a string with N characters.
Input : str = “abc”
Output : 6
Every substring of the given string : “a”, “b”, “c”, “ab”, “bc”, “abc”
Input : str = “abcd”
Output : 10
Every substring of the given string : “a”, “b”, “c”, “d”, “ab”, “bc”, “cd”, “abc”, “bcd” and “abcd”
Count of non-empty substrings is n*(n+1)/2
If we include empty string also as substring, the count becomes n*(n+1)/2 + 1
How does above formula work?
- Number of substrings of length one is n (We can choose any of the n characters)
- Number of substrings of length two is n-1 (We can choose any of the n-1 pairs formed by adjacent)
- Number of substrings of length three is n-2
(We can choose any of the n-2 triplets formed by adjacent) - In general, number of substrings of length k is n-k+1 where 1 <= k <= n
Total number of substrings of all lengths from 1 to n =
n + (n-1) + (n-2) + (n-3) + … 2 + 1
= n * (n + 1)/2
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
int countNonEmptySubstr(string str)
{
int n = str.length();
return n*(n+1)/2;
}
int main()
{
string s = "abcde" ;
cout << countNonEmptySubstr(s);
return 0;
}
|
C
#include <stdio.h>
#include <string.h>
int countNonEmptySubstr( const char * str)
{
int n = strlen (str);
return n * (n + 1) / 2;
}
int main()
{
const char * s = "abcde" ;
printf ( "%d\n" , countNonEmptySubstr(s));
return 0;
}
|
Java
import java.io.*;
public class GFG {
static int countNonEmptySubstr(String str)
{
int n = str.length();
return n * (n + 1 ) / 2 ;
}
public static void main(String args[])
{
String s = "abcde" ;
System.out.println(
countNonEmptySubstr(s));
}
}
|
Python3
def countNonEmptySubstr( str ):
n = len ( str );
return int (n * (n + 1 ) / 2 );
s = "abcde" ;
print (countNonEmptySubstr(s));
|
C#
using System;
class GFG {
static int countNonEmptySubstr( string str)
{
int n = str.Length;
return n * (n + 1) / 2;
}
public static void Main()
{
string s = "abcde" ;
Console.Write(countNonEmptySubstr(s));
}
}
|
PHP
<?php
function countNonEmptySubstr( $str )
{
$n = strlen ( $str );
return $n * ( $n + 1) / 2;
}
$s = "abcde" ;
echo countNonEmptySubstr( $s );
?>
|
Javascript
<script>
function countNonEmptySubstr(str)
{
let n = str.length;
return n * (n + 1) / 2;
}
let s = "abcde" ;
document.write(countNonEmptySubstr(s));
</script>
|
Complexity Analysis:
- Time Complexity: O(1).
- Auxiliary Space: O(1).