解题思路之一:双循环暴力解题
解题代码:
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int size_ransomNote=ransomNote.length();
int size_magazine=magazine.length();
if(size_magazine<size_ransomNote) {
return false;
}
else{
for(int i=0;i<ransomNote.length();i++){
for(int j=0;j<magazine.length();j++){
if(ransomNote.charAt(i)==magazine.charAt(j)){
size_ransomNote--;
ransomNote=ransomNote.replaceFirst(String.valueOf(ransomNote.charAt(i)),"*");
magazine=magazine.replaceFirst(String.valueOf(magazine.charAt(j)),"*");
break;
}
}
}
if(size_ransomNote!=0)return false;
else return true;
}
}
}
弊端:双循环暴力解题,思路虽然清晰简单,但是代码执行效率低(耗时长)且占用内存高,这种解题方式始终不是最优解。
代码编辑过程中的收获和总结:
- break 的用法:
- switch结构中,终止本次语句序列。
- for循环中,不再执行循环之后的代码,直接进入下一个循环。
- 在 for循环中,break在单if语句中起作用,在if-else中不起作用。
- 计算数组长度:int[] num=new num[n], size_num=num.length;计算字符串长度:String.length();数组为:.length,字符串为:.length();数组Array中"length"是成员变量,字符串中".length()"是访问器方法,返回长度值。
- String replace的三种用法:
- replace(old_str/old_char,new_str/new_char);替换类型可以是String,也可以是char;而且一次性会将String对象中的所有old_str/old_char替换成new_str/new_char。
- replaceAll(str_正则表达式,str_replace) 方法使用给定的参数替换字符串所有匹配给定的正则表达式的子字符串。
- replaceFisrt(old_str,new_str);只替换第一个出现的old_str,该方法只适用字符串替换,不适用char数据替换。例如 replaceFirst("a","b")√;replaceFirst('a','b')×;
- charAt(i):获取字符串中i位置的数据,并返回char类型的字符。
- 转字符串类型的方法:
- 强制类型转换:String str=(String)num
- 通过空字符串+数字的形式:String str=""+num
- 使用String类的静态方法valueOf:String str=String.valueOf(num)