求各路大神解答一下,leetcode290这样解为什么没办法通过这个测试?

IMUHERO 2019-07-18 09:09:39
测试用例是leetcode上的:
题目链接:https://leetcode-cn.com/problems/word-pattern/
提交记录
31 / 33 个通过测试用例
状态:解答错误
提交时间:6 分钟之前
输入:
"ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdd"
"s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s t t"
输出:
false
预期:
true

package IMUHERO;

import java.util.HashMap;
import java.util.Map;

public class Solution290 {
public boolean wordPattern(String pattern, String str) {
String[] strings = str.split(" ");
if(strings.length!=pattern.length())return false;
Map<Character,Integer> map1 = new HashMap<>();
Map<String,Integer> map2 = new HashMap<>();
for(int i=0;i<strings.length;i++){
if(map1.put(pattern.charAt(i),i)!=(map2.put(strings[i],i))){
return false;
}
}
return true;
}

public static void main(String[] args) {
String pattern= "ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdd";
String str="s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s t t";
Solution290 solution290 = new Solution290();
solution290.wordPattern(pattern,str);
}
}
...全文
147 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cwmlow 2019-07-19
  • 打赏
  • 举报
回复
你的两个参数长度肯定超出了Interger的缓存池范围(-128~127) 超出范围就会新new Interger 对象,开辟出新的引用地址 你的判断比较的是两者的引用地址不相等时,返回false 循环初条件会一直不成立(因为都是从Interger缓存池取,引用地址相同),直到i超出了静态缓存池,两者新建Interger对象,条件成立,return false 循环结束。 你可以打个断点 debug看下 这两个map的引用地址变化就能理解了 也可以去看Interger的源码也能明白
立刀流 2019-07-19
  • 打赏
  • 举报
回复
包装类维护了一个缓存池,里面在这个范围内的都是直接取,而不是重新生成
IMUHERO 2019-07-18
  • 打赏
  • 举报
回复
引用 1 楼 yety123 的回复:
map1.put(pattern.charAt(i),i)!=(map2.put(strings[i],i)) 这段对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false
改成下面的代码就通过,还是不太清楚你回复的意思,能讲的再清楚一点吗? 为什么-128~127之间就是true,不在此区间就是false呢???
class Solution {
    public boolean wordPattern(String pattern, String str) {
        String[] strings = str.split(" ");
        if(strings.length!=pattern.length())return false;
        Map<Character,Integer> map1 = new HashMap<>();
        Map<String,Integer> map2 = new HashMap<>();
        for(int i=0;i<strings.length;i++){
            if (!map1.containsKey(pattern.charAt(i))) {
                map1.put(pattern.charAt(i), i);
            }
            if (!map2.containsKey(strings[i])) {
                map2.put(strings[i], i);
            }
            int a=map1.get(pattern.charAt(i));
            int b=map2.get(strings[i]);
            if(a!=b){
                return false;
            }
        }
        return true;
    }
}

yety123 2019-07-18
  • 打赏
  • 举报
回复
map1.put(pattern.charAt(i),i)!=(map2.put(strings[i],i))
这段对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧