Постановка задачи.Даны две строки s1 и s2, содержащие как прописные, так и строчные буквы. Строка s2 генерируется путем случайного перемешивания строки s1 с последующим добавлением одной дополнительной буквы в любой случайной позиции. Задача состоит в том, чтобы найти ту лишнюю букву, которая позже была добавлена к строке s2.
EXAMPLE 1: s1 = "gfg" s2 = "gmgf" Ans: m EXPLANATION: The added letter is m EXAMPLE 2: s1 = "GFGistheBest" s2 = "GeFtGhLBietss" Ans: L EXPLANATION: The added letter is L
Поскольку к перемешанной строке добавляется только один символ, мы можем использовать для этой цели XOR. Вот реализованный код на C и C++
C++
#include<bits/stdc++.h> using namespace std;
char diff_str(string s,string t) { char r=0; for(char c:s)r^=c; for(char c:t)r^=c; return r; }
int main() { char c = diff_str("GFGistheBest","GeFtGhLBietss"); cout<<c; return 0; }
C
#include<stdio.h> #include<string.h> char diff_str(char s[],char t[]) { char r=0; for(int i=0;i<strlen(s);i++) { r^=s[i]; } for(int i=0;i<strlen(t);i++) { r^=t[i]; } return r; }
int main() { char c = diff_str("GFGistheBest","GeFtGhLBietss"); printf("%c",c); return 0; }
OUTPUT: L
Временная сложность = O(n)
Пространственная сложность = O(1)