Find all palindromic sub-strings of a given string | Set 2 - GeeksforGeeks

04 Aug, 2021
Given a string, the task is to find all the palindromic sub-strings from the given string.In Set – 1, another approach has been already discussed and that consider only distinct sub-strings but in this equal sub-strings i.e. ll and ll are considered as two sub-strings, not one.
Examples: 
Input : hellolle Output : 13 [h, e, l, ll, l, o, lol, lloll, ellolle, l, ll, l, e] Explanation: 1) ellolle 2) ll, ll – Note that these are two distinct sub-strings that only happen to be equal 3) lol and lloll 4) And, of course, each letter can be considered a palindrome – all 8 of them.   Input : geeksforgeeks Output : 15 [g, e, ee, e, k, s, f, o, r, g, e, ee, e, k, s]
Approach: 1- We can have two types of palindrome strings that we need to handle -Even Length -Odd Length 2- The idea is to consider a mid point and keep checking for the palindrome string by comparing the elements on the left and the elements on the right by increasing the distance or palindromeRadius by one at a time until there is a mismatch. 3- The algorithm handles the even and odd length palindrome scenarios in a single pass. 4- The pivot starts from 0 and moves till the end with a step size of 0.5. .......a) when the pivot is a non-fractional value, then the palindromeRadius values are integral starting from 0. .......b) when the pivot is a fractional value, then the palindromeRadius values are like 0.5, 1.5, 2.5, 3.5 .. 5- So, each time we get a palindrome match, we put it in a list (so that the duplicate values are preserved because each duplicate sub-string is obtained by a different combination of alphabet positions)
C++
Java
Python3
C#
Javascript
// c++ program to Count number of ways we// can get palindrome string from a given// string#include<bits/stdc++.h>using namespace std; // function to find the substring of the// stringstring substring(string s,int a,int b){    string s1="";         // extract the specified position of    // the string    for(int i = a; i < b; i++)        s1 = s1 + s[i];             return s1;} // can get palindrome string from a// given stringvector<string> allPalindromeSubstring(string s){    vector<string> v ;     // moving the pivot from starting till    // end of the string    for (float pivot = 0; pivot < s.length();                                 pivot += .5)    {         // set radius to the first nearest        // element on left and right        float palindromeRadius = pivot -                                  (int)pivot;         // if the position needs to be        // compared has an element and the        // characters at left and right        // matches        while ((pivot + palindromeRadius)         < s.length() && (pivot - palindromeRadius)         >= 0 && s[((int)(pivot - palindromeRadius))]             == s[((int)(pivot + palindromeRadius))])        {             v.push_back(substring(s,(int)(pivot -                     palindromeRadius), (int)(pivot                           + palindromeRadius + 1)));             // increasing the radius by 1 to point            // to the next elements in left and right            palindromeRadius++;        }    }     return v;} // Driver codeint main(){    vector <string> v =                  allPalindromeSubstring("hellolle");                       cout << v.size() << endl;    for(int i = 0; i < v.size(); i++)        cout << v[i] << ",";    cout << endl;    v = allPalindromeSubstring("geeksforgeeks");    cout << v.size() << endl;         for(int i = 0; i < v.size(); i++)        cout << v[i] << ",";} // This code is contributed by Arnab Kundu.
// Java program to Count number of ways we// can get palindrome string from a given stringimport java.util.ArrayList;import java.util.List; public class AllPalindromeSubstringsPossible {    public static List<String> allPalindromeSubstring(String s)    {        List<String> list = new ArrayList<String>();         // moving the pivot from starting till end of the string        for (float pivot = 0; pivot < s.length(); pivot += .5) {             // set radius to the first nearest element            // on left and right            float palindromeRadius = pivot - (int)pivot;             // if the position needs to be compared has an element            // and the characters at left and right matches            while ((pivot + palindromeRadius) < s.length()                   && (pivot - palindromeRadius) >= 0                   && s.charAt((int)(pivot - palindromeRadius))                          == s.charAt((int)(pivot + palindromeRadius))) {                 list.add(s.substring((int)(pivot - palindromeRadius),                                     (int)(pivot + palindromeRadius + 1)));                 // increasing the radius by 1 to point to the                // next elements in left and right                palindromeRadius++;            }        }         return list;    }     // Drivers code    public static void main(String[] args)    {        List<String> list = allPalindromeSubstring("hellolle");        System.out.println(list.size());        System.out.println(list);        list = allPalindromeSubstring("geeksforgeeks");        System.out.println(list.size());        System.out.println(list);    }}
# Python3 program to Count number of ways we# can get palindrome string from a given# string # function to find the substring of the# stringdef substring(s, a, b):    s1 = ""     # extract the specified position of    # the string    for i in range(a, b, 1):        s1 += s[i]     return s1 # can get palindrome string from a# given stringdef allPalindromeSubstring(s):    v = []     # moving the pivot from starting till    # end of the string    pivot = 0.0    while pivot < len(s):         # set radius to the first nearest        # element on left and right        palindromeRadius = pivot - int(pivot)         # if the position needs to be        # compared has an element and the        # characters at left and right        # matches        while ((pivot + palindromeRadius) < len(s) and                   (pivot - palindromeRadius) >= 0 and                  (s[int(pivot - palindromeRadius)] ==                   s[int(pivot + palindromeRadius)])):             v.append(s[int(pivot - palindromeRadius):                        int(pivot + palindromeRadius + 1)])              # increasing the radius by 1 to point             # to the next elements in left and right             palindromeRadius += 1         pivot += 0.5    return v # Driver Codeif __name__ == "__main__":    v = allPalindromeSubstring("hellolle")    print(len(v))    print(v)     v = allPalindromeSubstring("geeksforgeeks")    print(len(v))    print(v) # This code is contributed by# sanjeev2552
// C# program to Count number of ways we// can get palindrome string from a given stringusing System;using System.Collections.Generic; public class AllPalindromeSubstringsPossible{    public static List<String> allPalindromeSubstring(String s)    {        List<String> list = new List<String>();         // moving the pivot from starting till end of the string        for (float pivot = 0; pivot < s.Length; pivot+= (float).5)        {             // set radius to the first nearest element            // on left and right            float palindromeRadius = pivot - (int)pivot;             // if the position needs to be compared has an element            // and the characters at left and right matches            while ((pivot + palindromeRadius) < s.Length                && (pivot - palindromeRadius) >= 0                && s[(int)(pivot - palindromeRadius)]                        == s[(int)(pivot + palindromeRadius)])            {                 list.Add(s.Substring((int)(pivot - palindromeRadius),                            (int)(pivot + palindromeRadius + 1)-                            (int)(pivot - palindromeRadius)));                 // increasing the radius by 1 to point to the                // next elements in left and right                palindromeRadius++;            }        }         return list;    }     // Drivers code    public static void Main(String[] args)    {        List<String> list = allPalindromeSubstring("hellolle");        Console.WriteLine(list.Count);        for(int i = 0; i < list.Count; i++)            Console.Write(list[i]+",");        list = allPalindromeSubstring("geeksforgeeks");        Console.WriteLine("\n"+list.Count);        for(int i = 0; i < list.Count; i++)            Console.Write(list[i]+",");    }} /* This code contributed by PrinciRaj1992 */
<script> // JavaScript program to Count number of ways we// can get palindrome string from a given string function allPalindromeSubstring(s){    let list = [];           // moving the pivot from starting till end of the string        for (let pivot = 0; pivot < s.length; pivot += .5) {               // set radius to the first nearest element            // on left and right            let palindromeRadius = pivot - Math.floor(pivot);               // if the position needs to be compared has an element            // and the characters at left and right matches            while ((pivot + palindromeRadius) < s.length                   && (pivot - palindromeRadius) >= 0                   && s[(Math.floor(pivot - palindromeRadius))]                          == s[Math.floor(pivot + palindromeRadius)])                          {                   list.push(s.substring(Math.floor(pivot -                palindromeRadius),                Math.floor(pivot + palindromeRadius + 1)));                   // increasing the radius by 1 to point to the                // next elements in left and right                palindromeRadius++;            }        }           return list;} // Drivers codelet list = allPalindromeSubstring("hellolle");document.write(list.length+"<br>");document.write("["+list.join(", ")+"]<br>");list = allPalindromeSubstring("geeksforgeeks");document.write(list.length+"<br>");document.write("["+list.join(", ")+"]<br>"); // This code is contributed by avanitrachhadiya2155 </script>
13
[h, e, l, ll, l, o, lol, lloll, ellolle, l, ll, l, e]
15
[g, e, ee, e, k, s, f, o, r, g, e, ee, e, k, s]
 
Note: To print distinct substrings, use Set as it only takes distinct elements. 
andrew1234
princiraj1992
sanjeev2552
avanitrachhadiya2155
surindertarika1234
Java-String-Programs
palindrome
Java
Java Programs
Strings
Strings
Java
palindrome
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Multidimensional Arrays in Java
Queue Interface In Java
LinkedList in Java
HashMap in Java with Examples
ArrayList in Java
Convert a String to Character Array in Java
Initializing a List in Java
How to Iterate HashMap in Java?
Convert Double to Integer in Java
Iterate Over the Characters of a String in Java