本文主要是介绍力扣映射思辨题:赎金信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路很简单:查到就改
bool canConstruct(char* ransomNote, char* magazine) {for(long x=0;x<strlen(ransomNote);x++){for(long y=0;y<strlen(magazine);y++){if(magazine[y]==ransomNote[x]){ransomNote[x]='1';magazine[y]='1';break;}}}for(long x=0;x<strlen(ransomNote);x++){if(ransomNote[x]!='1'){return false;}}return true;
}
这是笔者的代码,因为magazine数据过大毙了,整体思路为如果相同则将目标字符串对应位置标为1,再将样本字符串对应位置标为1并break,防止其再次进行判断
所以这是通过大佬的代码
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;
}
同样是遍历,大佬只是计算匹配次数并与目标字符串长度进行比较,对样本字符串的处理和我相同,但是减少了一次遍历,大大缩短了时间
这篇关于力扣映射思辨题:赎金信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!