Find all distinct palindromic sub | C # program to find all distinct palindrome sub - strings of a given string ; Function to print all distinct palindrome sub - strings of s ; table for storing results ( 2 rows for odd - and even - length palindromes ; Find all sub - string palindromes from the given input string insert ' guards ' to iterate easily over s ; int rp = 0 ; length of ' palindrome ▁ radius ' ; Attempt to expand palindrome centered at i ; Incrementing the length of palindromic radius as and when we find vaid palindrome ; Assigning the found palindromic length to odd / even length array ; remove ' guards ' ; Put all obtained palindromes in a hash map to find only distinct palindromess ; printing all distinct palindromes from hash map ; Driver Code
using System ; using System . Collections . Generic ; class GFG { public static void palindromeSubStrs ( string s ) { Dictionary < string , int > m = new Dictionary < string , int > ( ) ; int n = s . Length ; int [ , ] R = new int [ 2 , n + 1 ] ; s = " @ " + s + " # " ; for ( int j = 0 ; j <= 1 ; j ++ ) { R [ j , 0 ] = 0 ; int i = 1 ; while ( i <= n ) { while ( s [ i - rp - 1 ] == s [ i + j + rp ] ) rp ++ ; R [ j , i ] = rp ; int k = 1 ; while ( ( R [ j , i - k ] != rp - k ) && k < rp ) { R [ j , i + k ] = Math . Min ( R [ j , i - k ] , rp - k ) ; k ++ ; } rp = Math . Max ( rp - k , 0 ) ; i += k ; } } s = s . Substring ( 1 ) ; if ( ! m . ContainsKey ( s . Substring ( 0 , 1 ) ) ) m . Add ( s . Substring ( 0 , 1 ) , 1 ) ; else m [ s . Substring ( 0 , 1 ) ] ++ ; for ( int i = 1 ; i < n ; i ++ ) { for ( int j = 0 ; j <= 1 ; j ++ ) for ( int rp = R [ j , i ] ; rp > 0 ; rp -- ) { if ( ! m . ContainsKey ( s . Substring ( i - rp - 1 , 2 * rp + j ) ) ) m . Add ( s . Substring ( i - rp - 1 , 2 * rp + j ) , 1 ) ; else m [ s . Substring ( i - rp - 1 , 2 * rp + j ) ] ++ ; } if ( ! m . ContainsKey ( s . Substring ( i , 1 ) ) ) m . Add ( s . Substring ( i , 1 ) , 1 ) ; else m [ s . Substring ( i , 1 ) ] ++ ; } Console . WriteLine ( " Below ▁ are ▁ " + ( m . Count ) ) ; foreach ( KeyValuePair < string , int > ii in m ) Console . WriteLine ( ii . Key ) ; } public static void Main ( string [ ] args ) { palindromeSubStrs ( " abaaa " ) ; } }