波波老师,leetcode 290题的一个疑惑
来源:4-3 set和map不同底层实现的区别
v不离不弃v
2020-02-26
波波老师您好,290我总结一点就是利用map进行一一对应关系,我的方法是分别构建2个hashmap然后分别验证一一对应,但是我在测试的时候发现,在输入一个cat之后,明明这个string就等于map里存着的string,但是它依然判断为false?老师您可以帮我看看为啥么?
我的代码:
import java.util.HashMap;
/**using hashtable
* time complexity:
* space complexity:
* */
public class Solution {
public boolean wordPattern(String pattern, String str) {
String[] words=str.split(" ");
if(pattern.length()!=words.length)
return false;
HashMap<Character,String> map = new HashMap<>();
for(int i=0;i<pattern.length();i++) {
if(map.containsKey(pattern.charAt(i))) {
if(map.get(pattern.charAt(i))!=words[i])
return false;
}
else
map.put(pattern.charAt(i), words[i]);
}
HashMap<String,Character> map1 = new HashMap<>();
for(int i=0;i<words.length;i++) {
if(map1.containsKey(words[i])) {
if(map1.get(words[i])!=pattern.charAt(i))
return false;
}
else
map1.put(words[i], pattern.charAt(i));
}
return true;
}
public static void main(String[] args) {
String pattern="abba";
String str="dog cat cat dog";
System.out.print(new Solution().wordPattern(pattern, str));
}
}
2回答
-
在这个测试用例下,你的程序输出就是错误的:
"aa"
"dog dog"自己单步跟踪调试一下,看看每一步程序的运行,程序中的变量都存储了什么?变化了什么?变量的变化是不是和你预想的逻辑一致?如果不一致,自己的代码那里有错误,导致没有表达出自己脑子里的逻辑?
在真正写程序的时候,即使最优秀的程序员,也会写出带 bug 的程序,实际上,一个真正的软件开发者,工作时调试用的时间,甚至比开发的时间还要长。能够定位程序中的错误,并且改正程序中的错误,甚至是一个软件工程师的核心竞争力,也是在笔试面试中考核的一个关键。
在笔试面试中,你也可能也会写出错误的代码,届时,你只能靠自己的调试,找到这个错误,并且改正。
更关键的是,在自己写程序的时候,通常进步就发生在这个过程中。
怎么调试?最基本的一点,是使用更小的测试用例,比如我提供给了你一个比你提供的测试用例更小的测试用例,方便你定位出程序中的问题。
其次,就是使用 IDE 中的单步跟踪,或者在逻辑的关键点打印信息的方式,验证程序的每一步执行,结果都和你预期的一致,如果发现不一致,进一步寻找错误的根据。
关于 debug 的重要性,也可以参考我的这篇文章的第 7 条:https://mp.weixin.qq.com/s?__biz=MzU4NTIxODYwMQ==&mid=2247483836&idx=1&sn=90854aa76507281403e4dd9cd434a12b&chksm=fd8caefacafb27ec78f999fde4f1217c04c6e2ff28cf51fe511d8fa29d484d9281ff91de8c9c&token=1074384736&lang=zh_CN#rd
继续加油!:)
032020-02-26 -
v不离不弃v
提问者
2020-02-26
debug中,设置了判断是否contains的布尔变量k,记录了在map中的值sm以及读入的s[]中的值s1,结果明明记录是相等(x显示均为dog)但是输出就是false。就是说,数值的读入肯定没问题,那么就是在!=和=这个判断有问题了。仔细想了一想,bobo老师说过java中相等,还有个equals,结果改了之后就AC了~~~
012020-02-26
相似问题