Skip to main content

Longest palindromic substring using dynamic programming

Here given code implementation process.

/*
    C program for
    Longest palindromic substring using dynamic programming
*/
#include <stdio.h>
#include <string.h>

void findLPS(char *text)
{
  // Get length of text
  int n = strlen(text);
  if (n == 0)
  {
    // When text is empty
    return;
  }
  int length = 1;
  int start = 0;
  int dp[n][n];
  for (int i = 0; i < n; ++i)
  {
    for (int j = 0; j < n; ++j)
    {
      dp[i][j] = 0;
    }
  }
  // Set diagonal elements value is 1
  for (int i = 0; i < n; ++i)
  {
    dp[i][i] = 1;
  }
  // Compare adjacent character
  for (int i = 0; i < n - 1; ++i)
  {
    if (text[i] == text[i + 1])
    {
      // When adjacent elements is similar
      dp[i][i + 1] = 1;
      // Change resultant length
      length = 2;
      start = i;
    }
  }
  for (int k = 3; k <= n; ++k)
  {
    for (int i = 0; i < n - k + 1; ++i)
    {
      int j = i + k - 1;
      if (dp[i + 1][j - 1] && text[i] == text[j])
      {
        dp[i][j] = 1;
        if (k > length)
        {
          // Change resultant length
          length = k;
          // Update resultant starting location
          start = i;
        }
      }
    }
  }
  // Display given text
  printf("\n Given string : %s", text);
  printf("\n Result : ");
  // Display resultant palindrome
  for (int i = start; i <= start + length - 1; ++i)
  {
    printf("%c", text[i]);
  }
  // Display length of resultant palindrome
  printf("\n Resultant length : %d", length);
}
int main(int argc, char
  const *argv[])
{
  // Test
  // iiii => 4
  findLPS("nitiiiigi");
  // ivfvi => 5
  findLPS("vvvvivfvim");
  // civic => 5
  findLPS("xyzacivicxrs");
  // opo => 3
  findLPS("ttoopo");
  return 0;
}

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
// Java program for
// Longest palindromic substring using dynamic programming
public class LongestPalindrome
{
    public void findLPS(String text)
    {
        // Get length of text
        int n = text.length();
        if (n == 0)
        {
            // When text is empty
            return;
        }
        int length = 1;
        int start = 0;
        int[][] dp = new int[n][n];
        for (int i = 0; i < n; ++i)
        {
            for (int j = 0; j < n; ++j)
            {
                dp[i][j] = 0;
            }
        }
        // Set diagonal elements value is 1
        for (int i = 0; i < n; ++i)
        {
            dp[i][i] = 1;
        }
        // Compare adjacent character
        for (int i = 0; i < n - 1; ++i)
        {
            if (text.charAt(i) == text.charAt(i + 1))
            {
                // When adjacent elements is similar
                dp[i][i + 1] = 1;
                // Change resultant length
                length = 2;
                start = i;
            }
        }
        for (int k = 3; k <= n; ++k)
        {
            for (int i = 0; i < n - k + 1; ++i)
            {
                int j = i + k - 1;
                if (dp[i + 1][j - 1] != 0 && text.charAt(i) == text.charAt(j))
                {
                    dp[i][j] = 1;
                    if (k > length)
                    {
                        // Change resultant length
                        length = k;
                        // Update resultant starting location
                        start = i;
                    }
                }
            }
        }
        // Display given text
        System.out.print("\n Given string : " + text);
        System.out.print("\n Result : ");
        // Display resultant palindrome
        for (int i = start; i <= start + length - 1; ++i)
        {
            System.out.print(text.charAt(i));
        }
        // Display length of resultant palindrome
        System.out.print("\n Resultant length : " + length);
    }
    public static void main(String[] args)
    {
        LongestPalindrome task = new LongestPalindrome();
        // Test
        // iiii => 4
        task.findLPS("nitiiiigi");
        // ivfvi => 5
        task.findLPS("vvvvivfvim");
        // civic => 5
        task.findLPS("xyzacivicxrs");
        // opo => 3
        task.findLPS("ttoopo");
    }
}

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
// Include header file
#include <iostream>
#include <string>
using namespace std;

// C++ program for
// Longest palindromic substring using dynamic programming

class LongestPalindrome
{
  public: void findLPS(string text)
  {
    // Get length of text
    int n = text.length();
    if (n == 0)
    {
      // When text is empty
      return;
    }
    int length = 1;
    int start = 0;
    int dp[n][n];
    for (int i = 0; i < n; ++i)
    {
      for (int j = 0; j < n; ++j)
      {
        dp[i][j] = 0;
      }
    }
    // Set diagonal elements value is 1
    for (int i = 0; i < n; ++i)
    {
      dp[i][i] = 1;
    }
    // Compare adjacent character
    for (int i = 0; i < n - 1; ++i)
    {
      if (text[i] == text[i + 1])
      {
        // When adjacent elements is similar
        dp[i][i + 1] = 1;
        // Change resultant length
        length = 2;
        start = i;
      }
    }
    for (int k = 3; k <= n; ++k)
    {
      for (int i = 0; i < n - k + 1; ++i)
      {
        int j = i + k - 1;
        if (dp[i + 1][j - 1] != 0 && text[i] == text[j])
        {
          dp[i][j] = 1;
          if (k > length)
          {
            // Change resultant length
            length = k;
            // Update resultant starting location
            start = i;
          }
        }
      }
    }
    // Display given text
    cout << "\n Given string : " << text;
    cout << "\n Result : ";
    // Display resultant palindrome
    for (int i = start; i <= start + length - 1; ++i)
    {
      cout << text[i];
    }
    // Display length of resultant palindrome
    cout << "\n Resultant length : " << length;
  }
};
int main()
{
  LongestPalindrome *task = new LongestPalindrome();
  // Test
  // iiii => 4
  task->findLPS("nitiiiigi");
  // ivfvi => 5
  task->findLPS("vvvvivfvim");
  // civic => 5
  task->findLPS("xyzacivicxrs");
  // opo => 3
  task->findLPS("ttoopo");
  return 0;
}

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
// Include namespace system
using System;
// Csharp program for
// Longest palindromic substring using dynamic programming
public class LongestPalindrome
{
  public void findLPS(String text)
  {
    // Get length of text
    int n = text.Length;
    if (n == 0)
    {
      // When text is empty
      return;
    }
    int length = 1;
    int start = 0;
    int[,] dp = new int[n,n];
    for (int i = 0; i < n; ++i)
    {
      for (int j = 0; j < n; ++j)
      {
        dp[i,j] = 0;
      }
    }
    // Set diagonal elements value is 1
    for (int i = 0; i < n; ++i)
    {
      dp[i,i] = 1;
    }
    // Compare adjacent character
    for (int i = 0; i < n - 1; ++i)
    {
      if (text[i] == text[i + 1])
      {
        // When adjacent elements is similar
        dp[i,i + 1] = 1;
        // Change resultant length
        length = 2;
        start = i;
      }
    }
    for (int k = 3; k <= n; ++k)
    {
      for (int i = 0; i < n - k + 1; ++i)
      {
        int j = i + k - 1;
        if (dp[i + 1,j - 1] != 0 && text[i] == text[j])
        {
          dp[i,j] = 1;
          if (k > length)
          {
            // Change resultant length
            length = k;
            // Update resultant starting location
            start = i;
          }
        }
      }
    }
    // Display given text
    Console.Write("\n Given string : " + text);
    Console.Write("\n Result : ");
    // Display resultant palindrome
    for (int i = start; i <= start + length - 1; ++i)
    {
      Console.Write(text[i]);
    }
    // Display length of resultant palindrome
    Console.Write("\n Resultant length : " + length);
  }
  public static void Main(String[] args)
  {
    LongestPalindrome task = new LongestPalindrome();
    // Test
    // iiii => 4
    task.findLPS("nitiiiigi");
    // ivfvi => 5
    task.findLPS("vvvvivfvim");
    // civic => 5
    task.findLPS("xyzacivicxrs");
    // opo => 3
    task.findLPS("ttoopo");
  }
}

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
package main
import "fmt"
// Go program for
// Longest palindromic substring using dynamic programming

func findLPS(text string) {
  // Get length of text
  var n int = len(text)
  if n == 0 {
    // When text is empty
    return
  }
  var length int = 1
  var start int = 0
  var dp = make([][] int, n)
  for i := 0; i < n; i++ {
    dp[i] = make([]int,n)
  }
  // Set diagonal elements value is 1
  for i := 0 ; i < n ; i++ {
    dp[i][i] = 1
  }
  // Compare adjacent character
  for i := 0 ; i < n - 1 ; i++ {
    if text[i] == text[i + 1] {
      // When adjacent elements is similar
      dp[i][i + 1] = 1
      // Change resultant length
      length = 2
      start = i
    }
  }
  for k := 3 ; k <= n ; k++ {
    for i := 0 ; i < n - k + 1 ; i++ {
      var j int = i + k - 1
      if dp[i + 1][j - 1] != 0 && text[i] == text[j] {
        dp[i][j] = 1
        if k > length {
          // Change resultant length
          length = k
          // Update resultant starting location
          start = i
        }
      }
    }
  }
  // Display given text
  fmt.Print("\n Given string : ", text)
  fmt.Print("\n Result : ")
  // Display resultant palindrome
  for i := start ; i <= start + length - 1 ; i++ {
    fmt.Print(string(text[i]))
  }
  // Display length of resultant palindrome
  fmt.Print("\n Resultant length : ", length)
}
func main() {
  
  // Test
  // iiii => 4
  findLPS("nitiiiigi")
  // ivfvi => 5
  findLPS("vvvvivfvim")
  // civic => 5
  findLPS("xyzacivicxrs")
  // opo => 3
  findLPS("ttoopo")
}

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
<?php
// Php program for
// Longest palindromic substring using dynamic programming
class LongestPalindrome
{
  public  function findLPS($text)
  {
    // Get length of text
    $n = strlen($text);
    if ($n == 0)
    {
      // When text is empty
      return;
    }
    $length = 1;
    $start = 0;
    $dp = array_fill(0, $n, array_fill(0, $n, 0));
    // Set diagonal elements value is 1
    for ($i = 0; $i < $n; ++$i)
    {
      $dp[$i][$i] = 1;
    }
    // Compare adjacent character
    for ($i = 0; $i < $n - 1; ++$i)
    {
      if ($text[$i] == $text[$i + 1])
      {
        // When adjacent elements is similar
        $dp[$i][$i + 1] = 1;
        // Change resultant length
        $length = 2;
        $start = $i;
      }
    }
    for ($k = 3; $k <= $n; ++$k)
    {
      for ($i = 0; $i < $n - $k + 1; ++$i)
      {
        $j = $i + $k - 1;
        if ($dp[$i + 1][$j - 1] != 0 && $text[$i] == $text[$j])
        {
          $dp[$i][$j] = 1;
          if ($k > $length)
          {
            // Change resultant length
            $length = $k;
            // Update resultant starting location
            $start = $i;
          }
        }
      }
    }
    // Display given text
    echo("\n Given string : ".$text);
    echo("\n Result : ");
    // Display resultant palindrome
    for ($i = $start; $i <= $start + $length - 1; ++$i)
    {
      echo($text[$i]);
    }
    // Display length of resultant palindrome
    echo("\n Resultant length : ".$length);
  }
}

function main()
{
  $task = new LongestPalindrome();
  // Test
  // iiii => 4
  $task->findLPS("nitiiiigi");
  // ivfvi => 5
  $task->findLPS("vvvvivfvim");
  // civic => 5
  $task->findLPS("xyzacivicxrs");
  // opo => 3
  $task->findLPS("ttoopo");
}
main();

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
// Node JS program for
// Longest palindromic substring using dynamic programming
class LongestPalindrome
{
  findLPS(text)
  {
    // Get length of text
    var n = text.length;
    if (n == 0)
    {
      // When text is empty
      return;
    }
    var length = 1;
    var start = 0;
    var dp = Array(n).fill(0).map(() => new Array(n).fill(0));
    // Set diagonal elements value is 1
    for (var i = 0; i < n; ++i)
    {
      dp[i][i] = 1;
    }
    // Compare adjacent character
    for (var i = 0; i < n - 1; ++i)
    {
      if (text.charAt(i) == text.charAt(i + 1))
      {
        // When adjacent elements is similar
        dp[i][i + 1] = 1;
        // Change resultant length
        length = 2;
        start = i;
      }
    }
    for (var k = 3; k <= n; ++k)
    {
      for (var i = 0; i < n - k + 1; ++i)
      {
        var j = i + k - 1;
        if (dp[i + 1][j - 1] != 0 && 
                    text.charAt(i) == text.charAt(j))
        {
          dp[i][j] = 1;
          if (k > length)
          {
            // Change resultant length
            length = k;
            // Update resultant starting location
            start = i;
          }
        }
      }
    }
    // Display given text
    process.stdout.write("\n Given string : " + text);
    process.stdout.write("\n Result : ");
    // Display resultant palindrome
    for (var i = start; i <= start + length - 1; ++i)
    {
      process.stdout.write(text.charAt(i));
    }
    // Display length of resultant palindrome
    process.stdout.write("\n Resultant length : " + length);
  }
}

function main()
{
  var task = new LongestPalindrome();
  // Test
  // iiii => 4
  task.findLPS("nitiiiigi");
  // ivfvi => 5
  task.findLPS("vvvvivfvim");
  // civic => 5
  task.findLPS("xyzacivicxrs");
  // opo => 3
  task.findLPS("ttoopo");
}
main();

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
#  Python 3 program for
#  Longest palindromic substring using dynamic programming
class LongestPalindrome :
  def findLPS(self, text) :
    #  Get length of text
    n = len(text)
    if (n == 0) :
      #  When text is empty
      return
    
    length = 1
    start = 0
    dp = [[0] * (n) for _ in range(n) ]
    i = 0
    #  Set diagonal elements value is 1
    while (i < n) :
      dp[i][i] = 1
      i += 1
    
    i = 0
    #  Compare adjacent character
    while (i < n - 1) :
      if (text[i] == text[i + 1]) :
        #  When adjacent elements is similar
        dp[i][i + 1] = 1
        #  Change resultant length
        length = 2
        start = i
      
      i += 1
    
    k = 3
    while (k <= n) :
      i = 0
      while (i < n - k + 1) :
        j = i + k - 1
        if (dp[i + 1][j - 1] != 0 and text[i] == text[j]) :
          dp[i][j] = 1
          if (k > length) :
            #  Change resultant length
            length = k
            #  Update resultant starting location
            start = i
          
        
        i += 1
      
      k += 1
    
    #  Display given text
    print("\n Given string : ", text, end = "")
    print("\n Result : ", end = "")
    i = start
    #  Display resultant palindrome
    while (i <= start + length - 1) :
      print(text[i], end = "")
      i += 1
    
    #  Display length of resultant palindrome
    print("\n Resultant length : ", length, end = "")
  

def main() :
  task = LongestPalindrome()
  #  Test
  #  iiii => 4
  task.findLPS("nitiiiigi")
  #  ivfvi => 5
  task.findLPS("vvvvivfvim")
  #  civic => 5
  task.findLPS("xyzacivicxrs")
  #  opo => 3
  task.findLPS("ttoopo")

if __name__ == "__main__": main()

Output

 Given string :  nitiiiigi
 Result : iiii
 Resultant length :  4
 Given string :  vvvvivfvim
 Result : ivfvi
 Resultant length :  5
 Given string :  xyzacivicxrs
 Result : civic
 Resultant length :  5
 Given string :  ttoopo
 Result : opo
 Resultant length :  3
#  Ruby program for
#  Longest palindromic substring using dynamic programming
class LongestPalindrome 
  def findLPS(text) 
    #  Get length of text
    n = text.length
    if (n == 0) 
      #  When text is empty
      return
    end

    length = 1
    start = 0
    dp = Array.new(n) {Array.new(n) {0}}
    i = 0
    #  Set diagonal elements value is 1
    while (i < n) 
      dp[i][i] = 1
      i += 1
    end

    i = 0
    #  Compare adjacent character
    while (i < n - 1) 
      if (text[i] == text[i + 1]) 
        #  When adjacent elements is similar
        dp[i][i + 1] = 1
        #  Change resultant length
        length = 2
        start = i
      end

      i += 1
    end

    k = 3
    while (k <= n) 
      i = 0
      while (i < n - k + 1) 
        j = i + k - 1
        if (dp[i + 1][j - 1] != 0 && text[i] == text[j]) 
          dp[i][j] = 1
          if (k > length) 
            #  Change resultant length
            length = k
            #  Update resultant starting location
            start = i
          end

        end

        i += 1
      end

      k += 1
    end

    #  Display given text
    print("\n Given string : ", text)
    print("\n Result : ")
    i = start
    #  Display resultant palindrome
    while (i <= start + length - 1) 
      print(text[i])
      i += 1
    end

    #  Display length of resultant palindrome
    print("\n Resultant length : ", length)
  end

end

def main() 
  task = LongestPalindrome.new()
  #  Test
  #  iiii => 4
  task.findLPS("nitiiiigi")
  #  ivfvi => 5
  task.findLPS("vvvvivfvim")
  #  civic => 5
  task.findLPS("xyzacivicxrs")
  #  opo => 3
  task.findLPS("ttoopo")
end

main()

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
// Scala program for
// Longest palindromic substring using dynamic programming
class LongestPalindrome()
{
  def findLPS(text: String): Unit = {
    // Get length of text
    var n: Int = text.length();
    if (n == 0)
    {
      // When text is empty
      return;
    }
    var length: Int = 1;
    var start: Int = 0;
    var dp: Array[Array[Int]] = Array.fill[Int](n, n)(0);
    var i: Int = 0;
    // Set diagonal elements value is 1
    while (i < n)
    {
      dp(i)(i) = 1;
      i += 1;
    }
    i = 0;
    // Compare adjacent character
    while (i < n - 1)
    {
      if (text.charAt(i) == text.charAt(i + 1))
      {
        // When adjacent elements is similar
        dp(i)(i + 1) = 1;
        // Change resultant length
        length = 2;
        start = i;
      }
      i += 1;
    }
    var k: Int = 3;
    while (k <= n)
    {
      i = 0;
      while (i < n - k + 1)
      {
        var j: Int = i + k - 1;
        if (dp(i + 1)(j - 1) != 0 && 
                    text.charAt(i) == text.charAt(j))
        {
          dp(i)(j) = 1;
          if (k > length)
          {
            // Change resultant length
            length = k;
            // Update resultant starting location
            start = i;
          }
        }
        i += 1;
      }
      k += 1;
    }
    // Display given text
    print("\n Given string : " + text);
    print("\n Result : ");
    i = start;
    // Display resultant palindrome
    while (i <= start + length - 1)
    {
      print(text.charAt(i));
      i += 1;
    }
    // Display length of resultant palindrome
    print("\n Resultant length : " + length);
  }
}
object Main
{
  def main(args: Array[String]): Unit = {
    var task: LongestPalindrome = new LongestPalindrome();
    // Test
    // iiii => 4
    task.findLPS("nitiiiigi");
    // ivfvi => 5
    task.findLPS("vvvvivfvim");
    // civic => 5
    task.findLPS("xyzacivicxrs");
    // opo => 3
    task.findLPS("ttoopo");
  }
}

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3
import Foundation;
// Swift 4 program for
// Longest palindromic substring using dynamic programming
class LongestPalindrome
{
  func findLPS(_ data: String)
  {
        let text = Array(data);
    // Get length of text
    let n: Int = text.count;
    if (n == 0)
    {
      // When text is empty
      return;
    }
    var length: Int = 1;
    var start: Int = 0;
    var dp: [[Int]] = 
          Array(repeating: Array(repeating: 0, count: n), count: n);
    var i: Int = 0;
    // Set diagonal elements value is 1
    while (i < n)
    {
      dp[i][i] = 1;
      i += 1;
    }
    i = 0;
    // Compare adjacent character
    while (i < n - 1)
    {
      if (text[i] == text[i + 1])
      {
        // When adjacent elements is similar
        dp[i][i + 1] = 1;
        // Change resultant length
        length = 2;
        start = i;
      }
      i += 1;
    }
    var k: Int = 3;
    while (k <= n)
    {
      i = 0;
      while (i < n - k + 1)
      {
        let j: Int = i + k - 1;
        if (dp[i + 1][j - 1]  != 0 && text[i] == text[j])
        {
          dp[i][j] = 1;
          if (k > length)
          {
            // Change resultant length
            length = k;
            // Update resultant starting location
            start = i;
          }
        }
        i += 1;
      }
      k += 1;
    }
    // Display given text
    print("\n Given string : ", data, terminator: "");
    print("\n Result : ", terminator: "");
    i = start;
    // Display resultant palindrome
    while (i <= start + length - 1)
    {
      print(text[i], terminator: "");
      i += 1;
    }
    // Display length of resultant palindrome
    print("\n Resultant length : ", length, terminator: "");
  }
}
func main()
{
  let task: LongestPalindrome = LongestPalindrome();
  // Test
  // iiii => 4
  task.findLPS("nitiiiigi");
  // ivfvi => 5
  task.findLPS("vvvvivfvim");
  // civic => 5
  task.findLPS("xyzacivicxrs");
  // opo => 3
  task.findLPS("ttoopo");
}
main();

Output

 Given string :  nitiiiigi
 Result : iiii
 Resultant length :  4
 Given string :  vvvvivfvim
 Result : ivfvi
 Resultant length :  5
 Given string :  xyzacivicxrs
 Result : civic
 Resultant length :  5
 Given string :  ttoopo
 Result : opo
 Resultant length :  3
// Kotlin program for
// Longest palindromic substring using dynamic programming
class LongestPalindrome
{
  fun findLPS(text: String): Unit
  {
    // Get length of text
    val n: Int = text.length;
    if (n == 0)
    {
      // When text is empty
      return;
    }
    var length: Int = 1;
    var start: Int = 0;
    val dp: Array < Array < Int >> = Array(n)
    {
      Array(n)
      {
        0
      }
    };
    var i: Int = 0;
    // Set diagonal elements value is 1
    while (i < n)
    {
      dp[i][i] = 1;
      i += 1;
    }
    i = 0;
    // Compare adjacent character
    while (i < n - 1)
    {
      if (text.get(i) == text.get(i + 1))
      {
        // When adjacent elements is similar
        dp[i][i + 1] = 1;
        // Change resultant length
        length = 2;
        start = i;
      }
      i += 1;
    }
    var k: Int = 3;
    while (k <= n)
    {
      i = 0;
      while (i < n - k + 1)
      {
        val j: Int = i + k - 1;
        if (dp[i + 1][j - 1] != 0 && text.get(i) == text.get(j))
        {
          dp[i][j] = 1;
          if (k > length)
          {
            // Change resultant length
            length = k;
            // Update resultant starting location
            start = i;
          }
        }
        i += 1;
      }
      k += 1;
    }
    // Display given text
    print("\n Given string : " + text);
    print("\n Result : ");
    i = start;
    // Display resultant palindrome
    while (i <= start + length - 1)
    {
      print(text.get(i));
      i += 1;
    }
    // Display length of resultant palindrome
    print("\n Resultant length : " + length);
  }
}
fun main(args: Array < String > ): Unit
{
  val task: LongestPalindrome = LongestPalindrome();
  // Test
  // iiii => 4
  task.findLPS("nitiiiigi");
  // ivfvi => 5
  task.findLPS("vvvvivfvim");
  // civic => 5
  task.findLPS("xyzacivicxrs");
  // opo => 3
  task.findLPS("ttoopo");
}

Output

 Given string : nitiiiigi
 Result : iiii
 Resultant length : 4
 Given string : vvvvivfvim
 Result : ivfvi
 Resultant length : 5
 Given string : xyzacivicxrs
 Result : civic
 Resultant length : 5
 Given string : ttoopo
 Result : opo
 Resultant length : 3




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment