diff --git a/Dynamic Programming/LongestPalindromicSubsequence-DP.cpp b/Dynamic Programming/LongestPalindromicSubsequence-DP.cpp new file mode 100644 index 0000000..c733fc2 --- /dev/null +++ b/Dynamic Programming/LongestPalindromicSubsequence-DP.cpp @@ -0,0 +1,47 @@ +// Author : Ritik Patil +// Date : 11/10/2022 +// Time : 23:19 +// Description : Added Famous OA round question with help of DP +/*Given A string, find the length of longest palindrome present in the string .*/ + +#include +using namespace std; + +/* Returns length of longest Palindrome Subsequence for a string */ +int longestPalindromeSubsequence(string s) +{ + string t = s; + reverse(t.begin(), t.end()); + int n = s.size(); + vector> dp(n + 1, vector(n + 1, 0)); + for (int i = 0; i <= n; i++) + { + dp[i][0] = dp[0][i] = 0; + } + for (int i = 1; i <= n; i++) + { + for (int j = 1; j <= n; j++) + { + if (s[i - 1] == t[j - 1]) + { + dp[i][j] = 1 + dp[i - 1][j - 1]; + } + else + { + dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); + } + } + } + return dp[n][n]; +} + +int main() +{ + string s; + cout << "Enter your string : "; + cin >> s; + + cout << "Length of Longest Palindrome Subsequence is : " << longestPalindromeSubsequence(s); + + return 0; +} diff --git a/sorting/heapSort.cpp b/sorting/heapSort.cpp new file mode 100644 index 0000000..a30bff5 --- /dev/null +++ b/sorting/heapSort.cpp @@ -0,0 +1,65 @@ +// C++ program for implementation of Heap Sort +#include +using namespace std; + +// To heapify a subtree rooted with node i which is +// an index in arr[]. n is size of heap +void heapify(int arr[], int n, int i) +{ + int largest = i; // Initialize largest as root + int l = 2 * i + 1; // left = 2*i + 1 + int r = 2 * i + 2; // right = 2*i + 2 + + // If left child is larger than root + if (l < n && arr[l] > arr[largest]) + largest = l; + + // If right child is larger than largest so far + if (r < n && arr[r] > arr[largest]) + largest = r; + + // If largest is not root + if (largest != i) { + swap(arr[i], arr[largest]); + + // Recursively heapify the affected sub-tree + heapify(arr, n, largest); + } +} + +// main function to do heap sort +void heapSort(int arr[], int n) +{ + // Build heap (rearrange array) + for (int i = n / 2 - 1; i >= 0; i--) + heapify(arr, n, i); + + // One by one extract an element from heap + for (int i = n - 1; i >= 0; i--) { + // Move current root to end + swap(arr[0], arr[i]); + + // call max heapify on the reduced heap + heapify(arr, i, 0); + } +} + +/* A utility function to print array of size n */ +void printArray(int arr[], int n) +{ + for (int i = 0; i < n; ++i) + cout << arr[i] << " "; + cout << "\n"; +} + +// Driver program +int main() +{ + int arr[] = { 12, 11, 13, 5, 6, 7 }; + int n = sizeof(arr) / sizeof(arr[0]); + + heapSort(arr, n); + + cout << "Sorted array is \n"; + printArray(arr, n); +}