Untitled
https://www.hackerrank.com/challenges/abbr/problemunknown
plain_text
4 years ago
2.5 kB
9
Indexable
#include <bits/stdc++.h> using namespace std; string ltrim(const string &); string rtrim(const string &); /* * Complete the 'abbreviation' function below. * * The function is expected to return a STRING. * The function accepts following parameters: * 1. STRING a * 2. STRING b */ string abbreviation(string a, string b) { int alen = a.length(); int blen = b.length(); bool dp[alen + 1][blen + 1]; for (int i = 0; i <= alen; i++) { for (int j = 0; j <= blen; j++) { dp[i][j] = false; } } dp[0][0] = true; // empty string of 'a' matches with empty string of 'b' for (int i = 0; i <= alen; i++) { for (int j = 0; j <= blen; j++) { if (i > 0) { if (a[i - 1] >= 'A' && a[i - 1] <= 'Z') { // If string 'a' has capital letter then it should match as capital letter cannot be converted to lower case letter. if (j > 0 && a[i - 1] == b[j - 1]) { dp[i][j] |= dp[i - 1][j - 1]; } else { dp[i][j] = false; } } else { // If string 'a' has lower case letter then we can either skip matching or match if that lower case letter of string 'a' matches with lower/upper case letter of string 'b' dp[i][j] |= dp[i - 1][j]; if (j > 0 && (((a[i - 1] - 'a') == (b[j - 1] - 'a')) || ((a[i - 1] - 'a') == (b[j - 1] - 'A')))) { dp[i][j] |= dp[i - 1][j - 1]; } } } } } if (dp[alen][blen]) { return "YES"; } else { return "NO"; } } int main() { ofstream fout(getenv("OUTPUT_PATH")); string q_temp; getline(cin, q_temp); int q = stoi(ltrim(rtrim(q_temp))); for (int q_itr = 0; q_itr < q; q_itr++) { string a; getline(cin, a); string b; getline(cin, b); string result = abbreviation(a, b); fout << result << "\n"; } fout.close(); return 0; } string ltrim(const string &str) { string s(str); s.erase( s.begin(), find_if(s.begin(), s.end(), not1(ptr_fun<int, int>(isspace))) ); return s; } string rtrim(const string &str) { string s(str); s.erase( find_if(s.rbegin(), s.rend(), not1(ptr_fun<int, int>(isspace))).base(), s.end() ); return s; }
Editor is loading...