From c413f3c6b2d031c1eb0e015d606d4cfd09e2be8f Mon Sep 17 00:00:00 2001 From: Alex Klymenko Date: Wed, 28 Aug 2024 18:35:21 +0200 Subject: [PATCH] refactor: `LongestPalindromicSubstring` (#5420) * refactor: LongestPalindromicSubstring * checkstyle: fix formatting --------- Co-authored-by: alxkm --- .../LongestPalindromicSubstring.java | 23 +++++++------------ .../LongestPalindromicSubstringTest.java | 22 ++++++++++++++++++ 2 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 src/test/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstringTest.java diff --git a/src/main/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstring.java b/src/main/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstring.java index c6ae55919..8a4ab2f52 100644 --- a/src/main/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstring.java +++ b/src/main/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstring.java @@ -1,25 +1,18 @@ package com.thealgorithms.dynamicprogramming; -/* - * Algorithm explanation https://leetcode.com/problems/longest-palindromic-substring/ +/** + * Class for finding the longest palindromic substring within a given string. + *

+ * A palindromic substring is a sequence of characters that reads the same backward as forward. + * This class uses a dynamic programming approach to efficiently find the longest palindromic substring. + * */ public final class LongestPalindromicSubstring { private LongestPalindromicSubstring() { } - public static void main(String[] args) { - String a = "babad"; - String b = "cbbd"; - - String aLPS = lps(a); - String bLPS = lps(b); - - System.out.println(a + " => " + aLPS); - System.out.println(b + " => " + bLPS); - } - - private static String lps(String input) { - if (input == null || input.length() == 0) { + public static String lps(String input) { + if (input == null || input.isEmpty()) { return input; } boolean[][] arr = new boolean[input.length()][input.length()]; diff --git a/src/test/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstringTest.java b/src/test/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstringTest.java new file mode 100644 index 000000000..278de7e10 --- /dev/null +++ b/src/test/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstringTest.java @@ -0,0 +1,22 @@ +package com.thealgorithms.dynamicprogramming; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.stream.Stream; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +public class LongestPalindromicSubstringTest { + + private static Stream provideTestCases() { + return Stream.of( + Arguments.of("babad", "aba"), Arguments.of("cbbd", "bb"), Arguments.of("a", "a"), Arguments.of("x", "x"), Arguments.of("", ""), Arguments.of("aaaa", "aaaa"), Arguments.of("mm", "mm"), Arguments.of("level", "level"), Arguments.of("bananas", "anana"), Arguments.of("abacabad", "abacaba")); + } + + @ParameterizedTest + @MethodSource("provideTestCases") + public void testLps(String input, String expected) { + assertEquals(expected, LongestPalindromicSubstring.lps(input)); + } +}