389. Find the Difference
原题:
解题:
采用map字典进行计数,由于只增加了一个字符,那么其他字符的在s和t中均各自出现,所以,可以先遍历串t,建立字符:计数字典,然后遍历串s,每个字符对应的计数就减一,只有增加的字符对应的计数才是1,其余的均为0;
class Solution { public: char findTheDifference(string s, string t) { int i = 0; int j = 0; map <char,int> maptmp; for(i = 0;i < t.length();i++) { maptmp[t[i]]++; } for(j = 0;j < s.length();j++) { if(maptmp.find(s[j])!= maptmp.end()) { maptmp[s[j]]--; } } for(i = 0;i < t.length();i++) { if(maptmp[t[i]] == 1) { return t[i]; } } } };
改进:先遍历s,然后遍历t,当计数小于0时则跳出循环,可以减少查找次数,同时用无序的map比有序map要快
class Solution { public: char findTheDifference(string s, string t) { int i = 0; int j = 0; unordered_map <char,int> maptmp; for(i = 0;i < s.length();i++) { maptmp[s[i]]++; } for(j = 0;j < t.length();j++) { maptmp[t[j]]--; if(maptmp[t[j]] < 0) { return t[j]; } } } };