I made this question and got downvoted in a day, although I got the answer I needed. But, I wanted to know what really is wrong with this question. I posted all information necessary. It got closed because it needs debugging details, but I surely put the code in.
Here it goes:
EDIT: In the problem, a random character from
I found a solution in C++ which works fine. Here´s the solution (made by user astrixsanath14):
The C++ solution calculates the difference of ASCII codes in a space and "propagated" it to the next one. Thus, making the differnce in the final space in
So, I replicated the code in C. This is the code:
However, an error occurs in testcase number 25, which receives as input these variables:
The correct output is
What do you think is wrong with this code? Why it does not work in this case?
Thank you for your help!
EDIT: From what I saw, it was an overflow problem. Since
Here it goes:
The question
I´m trying to solve the problem num. 389 at LeetCode (https://leetcode.com/problems/find-...nvType=study-plan-v2&envId=programming-skills), which is a very simple problem of finding a different character in a shuffled stringt
based on string s
.EDIT: In the problem, a random character from
s
is added to t
, so that t
is one char
bigger than s
.I found a solution in C++ which works fine. Here´s the solution (made by user astrixsanath14):
C++:
// C++
class Solution {
public:
char findTheDifference(string s, string t)
{
for(int i=0;i<s.size();i++)
t[i+1]+=t[i]-s[i]; //Passing the diff: (t[i]-s[i]) to t[i+1]
return t[t.size()-1]; //The diff will be carried over to the last element eventually
}
};
t
. That´s what we want, the different char
.So, I replicated the code in C. This is the code:
C:
char findTheDifference(char * s, char * t){
for (int i = 0; i < strlen(s); i++)
{
t[i + 1] += t[i] - s[i];
}
return t[strlen(t) - 1];
}
However, an error occurs in testcase number 25, which receives as input these variables:
Code:
s =
"ymbgaraibkfmvocpizdydugvalagaivdbfsfbepeyccqfepzvtpyxtbadkhmwmoswrcxnargtlswqemafandgkmydtimuzvjwxvlfwlhvkrgcsithaqlcvrihrwqkpjdhgfgreqoxzfvhjzojhghfwbvpfzectwwhexthbsndovxejsntmjihchaotbgcysfdaojkjldprwyrnischrgmtvjcorypvopfmegizfkvudubnejzfqffvgdoxohuinkyygbdzmshvyqyhsozwvlhevfepdvafgkqpkmcsikfyxczcovrmwqxxbnhfzcjjcpgzjjfateajnnvlbwhyppdleahgaypxidkpwmfqwqyofwdqgxhjaxvyrzupfwesmxbjszolgwqvfiozofncbohduqgiswuiyddmwlwubetyaummenkdfptjczxemryuotrrymrfdxtrebpbjtpnuhsbnovhectpjhfhahbqrfbyxggobsweefcwxpqsspyssrmdhuelkkvyjxswjwofngpwfxvknkjviiavorwyfzlnktmfwxkvwkrwdcxjfzikdyswsuxegmhtnxjraqrdchaauazfhtklxsksbhwgjphgbasfnlwqwukprgvihntsyymdrfovaszjywuqygpvjtvlsvvqbvzsmgweiayhlubnbsitvfxawhfmfiatxvqrcwjshvovxknnxnyyfexqycrlyksderlqarqhkxyaqwlwoqcribumrqjtelhwdvaiysgjlvksrfvjlcaiwrirtkkxbwgicyhvakxgdjwnwmubkiazdjkfmotglclqndqjxethoutvjchjbkoasnnfbgrnycucfpeovruguzumgmgddqwjgdvaujhyqsqtoexmnfuluaqbxoofvotvfoiexbnprrxptchmlctzgqtkivsilwgwgvpidpvasurraqfkcmxhdapjrlrnkbklwkrvoaziznlpor"
Code:
t =
"qhxepbshlrhoecdaodgpousbzfcqjxulatciapuftffahhlmxbufgjuxstfjvljybfxnenlacmjqoymvamphpxnolwijwcecgwbcjhgdybfffwoygikvoecdggplfohemfypxfsvdrseyhmvkoovxhdvoavsqqbrsqrkqhbtmgwaurgisloqjixfwfvwtszcxwktkwesaxsmhsvlitegrlzkvfqoiiwxbzskzoewbkxtphapavbyvhzvgrrfriddnsrftfowhdanvhjvurhljmpxvpddxmzfgwwpkjrfgqptrmumoemhfpojnxzwlrxkcafvbhlwrapubhveattfifsmiounhqusvhywnxhwrgamgnesxmzliyzisqrwvkiyderyotxhwspqrrkeczjysfujvovsfcfouykcqyjoobfdgnlswfzjmyucaxuaslzwfnetekymrwbvponiaojdqnbmboldvvitamntwnyaeppjaohwkrisrlrgwcjqqgxeqerjrbapfzurcwxhcwzugcgnirkkrxdthtbmdqgvqxilllrsbwjhwqszrjtzyetwubdrlyakzxcveufvhqugyawvkivwonvmrgnchkzdysngqdibhkyboyftxcvvjoggecjsajbuqkjjxfvynrjsnvtfvgpgveycxidhhfauvjovmnbqgoxsafknluyimkczykwdgvqwlvvgdmufxdypwnajkncoynqticfetcdafvtqszuwfmrdggifokwmkgzuxnhncmnsstffqpqbplypapctctfhqpihavligbrutxmmygiyaklqtakdidvnvrjfteazeqmbgklrgrorudayokxptswwkcircwuhcavhdparjfkjypkyxhbgwxbkvpvrtzjaetahmxevmkhdfyidhrdeejapfbafwmdqjqszwnwzgclitdhlnkaiyldwkwwzvhyorgbysyjbxsspnjdewjxbhpsvj"
The correct output is
t
, but mine just returns an empty string, more specifically the ASCII code 11, which is a tab space.What do you think is wrong with this code? Why it does not work in this case?
Thank you for your help!
EDIT: From what I saw, it was an overflow problem. Since
char
is only a byte long, a big enough string would surpass it. To solve the problem, it´s necessary to use a bigger data type, in that case short
is enough. Here´s the solution. Feel free to judge the code!
C:
char findTheDifference(char * s, char * t){
short sum = t[strlen(t) - 1];
for (size_t i = 0; i < strlen(s); i++)
{
sum += t[i] - s[i];
}
return (char) sum;
}