input.string <- readline(prompt = "Enter a string: ")
clean.string <- tolower(input.string)
n <- nchar(clean.string)
chars <- strsplit(clean.string, "")[[1]]
dp <- matrix(0, nrow = n, ncol = n)
for (i in seq_len(n)) {
dp[i, i] <- 1
}
for (cl in 2:n) {
for (i in 1:(n - cl + 1)) {
j <- i + cl - 1
if (chars[i] == chars[j] && cl == 2) {
dp[i, j] <- 2
} else if (chars[i] == chars[j]) {
dp[i, j] <- dp[i + 1, j - 1] + 2
} else {
dp[i, j] <- max(dp[i + 1, j], dp[i, j - 1])
}
}
}
reconstructLPS <- function(chars, dp, i, j) {
if (i > j) {
return("")
}
if (i == j) {
return(chars[i])
}
if (chars[i] == chars[j]) {
return(paste0(chars[i], reconstructLPS(chars, dp, i + 1, j - 1), chars[j]))
}
if (dp[i + 1, j] > dp[i, j - 1]) {
return(reconstructLPS(chars, dp, i + 1, j))
} else {
return(reconstructLPS(chars, dp, i, j - 1))
}
}
lps <- reconstructLPS(chars, dp, 1, n)
cat("Longest Palindromic Subsequence:", lps, "\n")
cat("Length:", nchar(lps), "\n")