diff --git a/src/main/java/com/leetcode/dynamicprogramming/Leetcode_516_Longest_Palindromic_SubSequence.java b/src/main/java/com/leetcode/dynamicprogramming/Leetcode_516_Longest_Palindromic_SubSequence.java new file mode 100644 index 00000000..94a2bb74 --- /dev/null +++ b/src/main/java/com/leetcode/dynamicprogramming/Leetcode_516_Longest_Palindromic_SubSequence.java @@ -0,0 +1,60 @@ + public static void display_1D(int[] arr) + { + for (int ele : arr) + { + System.out.print(ele + "\t"); + } + System.out.println(); + } + public static void display_2D(int[][] arr) + { + for (int[] ar : arr) + { + display_1D(ar); + } + System.out.println(); + } + +public static int Leetcode_516_Longest_Pallindromic_SubSequence_Tabulation(String str, int si, int ei, int[][] dp, boolean[][] isPalindrome) + { + int n=str.length(); + for(int gap = 0; gap < n; gap++) + { + for(si = 0; si < n - gap; si++) + { + ei = si + gap; + + if(isPalindrome[si][ei]) + { + dp[si][ei] = ei-si+1; + continue; + } + + int len=0; + if(str.charAt(si) == str.charAt(ei)) + { + len = dp[si+1][ei-1] + 2; + } + else + { + len = Math.max(dp[si+1][ei], dp[si][ei-1]); + } + + dp[si][ei] = len; + } + } + + return dp[0][str.length()-1]; + } + + public static void Leetcode_516_Longest_Pallindromic_SubSequence() + { + String str = "geeksforgeeks"; + int n = str.length(); + int si = 0, ei = n - 1; + int[][] dp = new int[n][n]; + + boolean[][] isPalindrome = is_Pallindrome_SubString(str); + System.out.println("Tabulation :- " + Leetcode_516_Longest_Pallindromic_SubSequence_Tabulation(str, si, ei, dp, isPalindrome)); + display_2D(dp); + } diff --git a/src/main/java/com/leetcode/dynamicprogramming/Leetcode_70_Climb_Stairs.java b/src/main/java/com/leetcode/dynamicprogramming/Leetcode_70_Climb_Stairs.java new file mode 100644 index 00000000..f2a0b79a --- /dev/null +++ b/src/main/java/com/leetcode/dynamicprogramming/Leetcode_70_Climb_Stairs.java @@ -0,0 +1,60 @@ +public static int LeetCode_70_Climbing_Stairs_Memoization(int n, int[] dp) + { + if (n <= 1) + { + return dp[n] = 1; + } + + if (dp[n] != 0) + { + return dp[n]; + } + + int ans = LeetCode_70_Climbing_Stairs_Memoization(n - 1, dp) + + LeetCode_70_Climbing_Stairs_Memoization(n - 2, dp); + + return dp[n] = ans; + } + public static int LeetCode_70_Climbing_Stairs_Tabulation(int n, int[] dp) + { + int N = n; + for (n = 0; n <= N; n++) + { + if (n <= 1) + { + dp[n] = 1; + continue; + } + + int ans = dp[n - 1] + dp[n - 2]; + + dp[n] = ans; + } + + return dp[N]; + } + public static int LeetCode_70_Climbing_Stairs_Better(int n) + { + int a = 1; + int b = 1; + int sum = 0; + + for (int i = 2; i <= n; i++) + { + sum = a + b; + a = b; + b = sum; + } + + return sum; + } + public static void LeetCode_70_Climbing_Stairs() + { + int n=7; + int[] dp = new int[n+1]; + System.out.println("Memoization :- " + LeetCode_70_Climbing_Stairs_Memoization(n, dp)); + display_1D(dp); + System.out.println("Tabulation :- " + LeetCode_70_Climbing_Stairs_Tabulation(n, dp)); + display_1D(dp); + System.out.println("Better :- " + LeetCode_70_Climbing_Stairs_Better(n)); + }