bool canConstruct(char* ransomNote, char* magazine) {
int l_r = strlen(ransomNote);
int l_m = strlen(magazine);
if(l_r > l_m) return false;
int count = 0;
for(int i = 0; i < l_r; i++) {
for(int j = 0; j < l_m; j++) {
if(ransomNote[i] == magazine[j]) {
count++;
magazine[j] = ' ';
break;
}
}
}
if(count == l_r) return true;
else return false;
}
c语言解法,未用哈希
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int record[26] = {0};
//add
if (ransomNote.size() > magazine.size()) {
return false;
}
for (int i = 0; i < magazine.length(); i++) {
// 通过record数据记录 magazine里各个字符出现次数
record[magazine[i]-'a'] ++;
}
for (int j = 0; j < ransomNote.length(); j++) {
// 遍历ransomNote,在record里对应的字符个数做--操作
record[ransomNote[j]-'a']--;
// 如果小于零说明ransomNote里出现的字符,magazine没有
if(record[ransomNote[j]-'a'] < 0) {
return false;
}
}
return true;
}
};
c++的哈希解法
一、出错点
1.break结束循环没想到
2.最后的else也没想到
二、理解后的思路
就是用两个for循环:
一开始算出两个字符串的长度,如果l里面的字符串比m里面的还大,肯定返回false
现在就可以开启循环啦!不过,你是否知道用 magazine[j] = ' ';这一步呢?
三、总结
对于初学者,一开始只能大量的积累模仿。
等慢慢的自己有了感觉之后,再去独立做题思考!
所以,还是保存多看题,多刷题,多敲代码!!!