383-Ransom Note
原题
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = "a", magazine = "b"
输出:false
示例 2:
输入:ransomNote = "aa", magazine = "ab"
输出:false
示例 3:
输入:ransomNote = "aa", magazine = "aab"
输出:true
提示:
1 <= ransomNote.length, magazine.length <= 105
ransomNote 和 magazine 由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ransom-note
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
if (ransomNote.length() > magazine.length()){
return false;
}
int[] cnt = new int [26];
for (char c: magazine.toCharArray()){
cnt[c - 'a']++;
}
for (char c: ransomNote.toCharArray()){
cnt[c - 'a']--;
if(cnt[c - 'a'] < 0){
return false;
}
}
return true;
}
}
缕清思路
- 本题的思路是,用一个字符数组来计数,对magazine字符串中相同的字符做加运算,再对ransomNote字符串中相同的字符做减运算,若对应数组元素的值小于零,则返回false,否则返回true。
- 写题时,对于
String.toCharArray()方法的使用,存在一些疑惑。String.toCharArray()方法,作用是将字符串转换为字符数组。- Jdk1.8中,toCharArray()的源码
/**
* Converts this string to a new character array.
*
* @return a newly allocated character array whose length is the length
* of this string and whose contents are initialized to contain
* the character sequence represented by this string.
*/
public char[] toCharArray() {
// Cannot use Arrays.copyOf because of class initialization order issues
char result[] = new char[value.length];
System.arraycopy(value, 0, result, 0, value.length);
return result;
}
我们来分析源码,先看一下注释:
Converts this string to a new character array,即‘将这个字符串变为一个新的字符数组’;
其中,value是被private final char[]修饰的存储字符序列的成员变量。@return a newly allocated character array whose length is the length of this string and whose contents are initialized to contain the character sequence represented by this string,即‘@返回 一个新分配的字符数组,其长度为该字符串的长度,其内容被初始化为包含该字符串所表示的字符序列’;Cannot use Arrays.copyOf because of class initialization order issues,即‘由于类初始化顺序问题,无法使用Arrays.copyOf’;
然后看代码:value.length指的是String的每个char元素存放在final型的char[]数组的成员变量的长度;arraycopy()用来复制数组,详解;- 最后返回一个
result数组。
参考文献来源
本文来自博客园,作者:一样花开,转载请注明原文链接:https://www.cnblogs.com/axleo/p/16426136.html

浙公网安备 33010602011771号