Related Articles

# Check if summation of two words is equal to target word

• Last Updated : 09 Aug, 2021

Given three strings A, B, and C of size L, M, and N respectively and consisting of only lower case English alphabets less than ‘K’. The task is to check if the sum of strings A and B is equal to the string C after decoding the strings into integers by mapping alphabets with their index value in the list of alphabets and concatenating them.

Examples:

Attention reader! All those who say programming isn't for kids, just haven't met the right mentors yet. Join the  Demo Class for First Step to Coding Coursespecifically designed for students of class 8 to 12.

The students will get to learn more about the world of programming in these free classes which will definitely help them in making a wise career choice in the future.

Input: A = “acb”, B = “cba”, C = “cdb”
Output: Yes
Explanation:

1. The string A, modifies to integer 021 after replacing the characters ‘a’, ‘b’ and ‘c’ with their index values in the list of alphabets i.e 0, 1 and 2.
2. The string B, modifies to integer 210 after replacing the characters ‘a’, ‘b’ and ‘c’ with their index values in the list of alphabets i.e 0, 1 and 2.
3. The string C, modifies to integer 231 after replacing the characters ‘b’, ‘c’ and ‘d’ with their index values in the list of alphabets i.e 1, 2 and 3.

The sum of strings A and B i.e (21+210 = 231) is equal to 231, which is the value of string C. Therefore, print “Yes”.

Input: A = “aaa”, B = “bcb”, C = “bca”
Output: No

Approach: The problem can be solved using a similar approach used in finding the sum of two large numbers represented as strings. Follow the steps below to solve the problem:

• Reverse the strings A, B, and C.
• Initialize two variables, say curr and rem as 0 to store the value at ith position and the remainder of the sum of the strings A and B.
• Iterate over the range [0, max(L, max(M, N))] using the variable i and performing the following steps:
• Store the sum of characters at the ith index of the strings A and B in the variable curr.
• Update curr as curr = curr+rem and then update rem as rem = curr/10.
• Now check if i is less than N and curr%10 is not equal to the C[i]-‘a’ i.e value at the ith character of the string C, then print “No” and return.
• Finally, after completing the above steps, if rem is greater than 0 then print “No“. Otherwise, print “Yes“.

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach``#include ``using` `namespace` `std;` `// Function to check weather summation``// of two words equal to target word``string isSumEqual(string A, string B, string C)``{` `    ``// Store the length of each string``    ``int` `L = A.length();``    ``int` `M = B.length();``    ``int` `N = A.length();` `    ``// Reverse the strings A, B and C``    ``reverse(A.begin(), A.end());``    ``reverse(B.begin(), B.end());``    ``reverse(C.begin(), C.end());` `    ``// Stores the remainder``    ``int` `rem = 0;` `    ``// Iterate in the range``    ``// [0, max(L, max(M, N))]``    ``for` `(``int` `i = 0; i < max(L, max(M, N)); i++) {` `        ``// Stores the integer at ith``        ``// position from the right in``        ``// the sum of A and B``        ``int` `curr = rem;` `        ``// If i is less than L``        ``if` `(i < L)``            ``curr += A[i] - ``'a'``;` `        ``// If i is less than M``        ``if` `(i < M)``            ``curr += B[i] - ``'a'``;` `        ``// Update rem and curr``        ``rem = curr / 10;``        ``curr %= 10;` `        ``// If i is less than N``        ``// and curr is not equal``        ``// to C[i]-'a', return "No"``        ``if` `(i < N && curr != C[i] - ``'a'``) {``            ``return` `"No"``;``        ``}``    ``}` `    ``// If rem is greater``    ``// than 0, return "No"``    ``if` `(rem)``        ``return` `"No"``;` `    ``// Otherwise, return "Yes"``    ``else``        ``return` `"Yes"``;``}` `// Driver Code``int` `main()``{` `    ``// Given Input``    ``string A = ``"acb"``, B = ``"cba"``, C = ``"cdb"``;` `    ``// Function Call``    ``cout << isSumEqual(A, B, C);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;` `class` `GFG{` `// Function to check weather summation``// of two words equal to target word``static` `String isSumEqual(String A, String B, String C)``{` `    ``// Store the length of each String``    ``int` `L = A.length();``    ``int` `M = B.length();``    ``int` `N = A.length();` `    ``// Reverse the Strings A, B and C``    ``A = reverse(A);``    ``B = reverse(B);``    ``C = reverse(C);` `    ``// Stores the remainder``    ``int` `rem = ``0``;` `    ``// Iterate in the range``    ``// [0, Math.max(L, Math.max(M, N))]``    ``for` `(``int` `i = ``0``; i < Math.max(L, Math.max(M, N)); i++) {` `        ``// Stores the integer at ith``        ``// position from the right in``        ``// the sum of A and B``        ``int` `curr = rem;` `        ``// If i is less than L``        ``if` `(i < L)``            ``curr += A.charAt(i) - ``'a'``;` `        ``// If i is less than M``        ``if` `(i < M)``            ``curr += B.charAt(i) - ``'a'``;` `        ``// Update rem and curr``        ``rem = curr / ``10``;``        ``curr %= ``10``;` `        ``// If i is less than N``        ``// and curr is not equal``        ``// to C[i]-'a', return "No"``        ``if` `(i < N && curr != C.charAt(i) - ``'a'``) {``            ``return` `"No"``;``        ``}``    ``}` `    ``// If rem is greater``    ``// than 0, return "No"``    ``if` `(rem>``0``)``        ``return` `"No"``;` `    ``// Otherwise, return "Yes"``    ``else``        ``return` `"Yes"``;``}``static` `String reverse(String input) {``    ``char``[] a = input.toCharArray();``    ``int` `l, r = a.length - ``1``;``    ``for` `(l = ``0``; l < r; l++, r--) {``        ``char` `temp = a[l];``        ``a[l] = a[r];``        ``a[r] = temp;``    ``}``    ``return` `String.valueOf(a);``}``  ` `// Driver Code``public` `static` `void` `main(String[] args)``{` `    ``// Given Input``    ``String A = ``"acb"``, B = ``"cba"``, C = ``"cdb"``;` `    ``// Function Call``    ``System.out.print(isSumEqual(A, B, C));``}``}` `// This code is contributed by 29AjayKumar`

## Python3

 `# Python3 program for the above approach` `# Function to check weather summation``# of two words equal to target word``def` `isSumEqual(A, B, C):` `    ``# Store the length of each string``    ``L ``=` `len``(A)``    ``M ``=` `len``(B)``    ``N ``=` `len``(A)` `    ``# Reverse the strings A, B and C``    ``A ``=` `A[::``-``1``]``    ``B ``=` `B[::``-``1``]``    ``C ``=` `C[::``-``1``]` `    ``# Stores the remainder``    ``rem ``=` `0` `    ``# Iterate in the range``    ``# [0, max(L, max(M, N))]``    ``for` `i ``in` `range``(``max``(L, ``max``(M, N))):` `        ``# Stores the integer at ith``        ``# position from the right in``        ``# the sum of A and B``        ``curr ``=` `rem` `        ``# If i is less than L``        ``if` `(i < L):``            ``curr ``+``=` `ord``(A[i]) ``-` `ord``(``'a'``)` `        ``# If i is less than M``        ``if` `(i < M):``            ``curr ``+``=` `ord``(B[i]) ``-` `ord``(``'a'``)` `        ``# Update rem and curr``        ``rem ``=` `curr ``/``/` `10``        ``curr ``%``=` `10` `        ``# If i is less than N``        ``# and curr is not equal``        ``# to C[i]-'a', return "No"``        ``if` `(i < N ``and` `curr !``=` `ord``(C[i]) ``-` `ord``(``'a'``)):``            ``return` `"No"` `    ``# If rem is greater``    ``# than 0, return "No"``    ``if` `(rem):``        ``return` `"No"``      ` `    ``# Otherwise, return "Yes"``    ``else``:``        ``return` `"Yes"` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``  ` `    ``# Given Input``    ``A ``=` `"acb"``    ``B ``=` `"cba"``    ``C ``=` `"cdb"` `    ``# Function Call``    ``print` `(isSumEqual(A, B, C))` `    ``# This code is contributed by mohit kumar 29.`

## C#

 `// C# program for the above approach``using` `System;` `public` `class` `GFG{` `// Function to check weather summation``// of two words equal to target word``static` `String isSumEqual(String A, String B, String C)``{` `    ``// Store the length of each String``    ``int` `L = A.Length;``    ``int` `M = B.Length;``    ``int` `N = A.Length;` `    ``// Reverse the Strings A, B and C``    ``A = reverse(A);``    ``B = reverse(B);``    ``C = reverse(C);` `    ``// Stores the remainder``    ``int` `rem = 0;` `    ``// Iterate in the range``    ``// [0, Math.Max(L, Math.Max(M, N))]``    ``for` `(``int` `i = 0; i < Math.Max(L, Math.Max(M, N)); i++) {` `        ``// Stores the integer at ith``        ``// position from the right in``        ``// the sum of A and B``        ``int` `curr = rem;` `        ``// If i is less than L``        ``if` `(i < L)``            ``curr += A[i] - ``'a'``;` `        ``// If i is less than M``        ``if` `(i < M)``            ``curr += B[i] - ``'a'``;` `        ``// Update rem and curr``        ``rem = curr / 10;``        ``curr %= 10;` `        ``// If i is less than N``        ``// and curr is not equal``        ``// to C[i]-'a', return "No"``        ``if` `(i < N && curr != C[i] - ``'a'``) {``            ``return` `"No"``;``        ``}``    ``}` `    ``// If rem is greater``    ``// than 0, return "No"``    ``if` `(rem>0)``        ``return` `"No"``;` `    ``// Otherwise, return "Yes"``    ``else``        ``return` `"Yes"``;``}``static` `String reverse(String input) {``    ``char``[] a = input.ToCharArray();``    ``int` `l, r = a.Length - 1;``    ``for` `(l = 0; l < r; l++, r--) {``        ``char` `temp = a[l];``        ``a[l] = a[r];``        ``a[r] = temp;``    ``}``    ``return` `String.Join(``""``,a);``}``  ` `// Driver Code``public` `static` `void` `Main(String[] args)``{` `    ``// Given Input``    ``String A = ``"acb"``, B = ``"cba"``, C = ``"cdb"``;` `    ``// Function Call``    ``Console.Write(isSumEqual(A, B, C));``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``
Output
`Yes`

Time Complexity: O(L+M+N)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up