题目意思:给定一个任意的勒索信字符串和另一个包含所有杂志的信件的字符串,如果可以从杂志上构建赎金条,则写一个将返回true的函数;否则,它将返回false。 每封杂志串的信件只能在你的勒索信中使用一次。
思路:用勒索信字符串和杂志信件字符一一比较,如果找到了,则把杂志信件的字符值置为”“
public boolean canConstruct(String ransomNote, String magazine) { int ransomNote_length = ransomNote.length(); int equalfalg = 0; char [] magazine_arr = magazine.toCharArray(); for(int i =0 ;i< ransomNote_length;i++){ char ransomNode_item = ransomNote.charAt(i); for(int j=0;j<magazine_arr.length;j++) { //存在相等就跳出 if(ransomNode_item == magazine_arr[j]){ magazine_arr[j] =' '; equalfalg++; break; } } } return equalfalg == ransomNote_length; }第二种方法很巧秒,实现把英文字符都存入数组中,最后判断数组的每一个位置是否存在<0即可
public static boolean canConstruct(String ransomNote, String magazine){ int[] arr = new int[26]; for (int i = 0; i < magazine.length(); i++) { arr[magazine.charAt(i) - 'a']++; } for (int i = 0; i < ransomNote.length(); i++) { if(--arr[ransomNote.charAt(i)-'a'] < 0) { return false; } } return true; }