题目:

错误提示详情:

思路 :建立一个频率数组存放t中每个字母出现的频率,然后减去s中该字母出现的频率 最后剩余频率不为0的字母就是添加的那个字母。
错误代码:
class Solution {
public:
char findTheDifference(string s, string t) {
vector<int> freq={0};//记录26个字母在t中的频率
if(s.size()==0)
return t[0];
for(int i=0;i<t.size();i++){
freq[t[i]-'a']++;
}
for(int i=0;i<s.size();i++){//如果s中也出现字母,将它的频率减1
freq[s[i]-'a']--;
}
for(int i=0;i<26;i++){//找出频率不为0的字母距离a的偏移量
if(freq[i]>0){
return 'a'+i; //返回该字母
}
}
}
};
问题出在!!!!!!!!!
用的是vector来存放两个字符串中每个字母出现的频率 ,但是vector长度不固定,所以当26个字母没有全部出现在字符串中时最后一个for循环中下标访问会出错,所以报了上图的错误。
解决方法:非常简单!将vector改成数组 即int freq[26]={0};
即:
class Solution {
public:
char findTheDifference(string s, string t) {
int freq[26]={0};//记录26个字母在t中的频率
for(int i=0;i<t.size();i++){
freq[t[i]-'a']++;
}
for(int i=0;i<s.size();i++){//如果s中也出现字母,将它的频率减1
freq[s[i]-'a']--;
}
for(int i=0;i<26;i++){//找出频率不为0的字母距离a的偏移量
if(freq[i]>0){
return 'a'+i; //返回该字母
}
}
}
};
结果:


本文详细解析了一种常见编程错误——使用vector时因长度不确定导致的越界访问问题,并提供了有效的解决方案,通过将vector替换为固定长度的数组,避免了运行时错误。

被折叠的 条评论
为什么被折叠?



