请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

有关438题

public List<Integer> findAnagrams(String s, String p) {
    char[] pArr = p.toCharArray();
    char[] sArr = s.toCharArray();

    List<Integer> res = new ArrayList();
    int[] needs = new int[26];
    int[] window = new int[26];

    for (int i = 0; i < pArr.length; i++) {
        needs[pArr[i] - 'a']++;
    }

    int l = 0, r = 0;
    while (r < sArr.length) {
        int curR = sArr[r] - 'a';
        r++;
        window[curR]++;
        while (window[curR] > needs[curR]) {
            int curL = sArr[l] - 'a';
            window[curL]--;
            l++;
        }
        if (pArr.length == r - l) {
            res.add(l);
        }
    }
    return res;
}

老师我想问的是438题,我的答案写的是
if(pArr.length == r  - l + 1){
res.add(l);
}

答案不通过,但是改为了r - l就通过了,我想问一下明明目标字符串的值应该等于的是r - l + 1呀。比如目标字符串是3个字符组成的,那么就应该是2 - 0 + 1才对,如果是 r - l的话,那么就变成2 - 0了呀。就是2了,不会等于3。这个地方想了半天想不明白。

正在回答

1回答

int curR = sArr[r] - 'a';
r++; // 因为你在这里 r ++  了。


所以你的 r 指向不是 curR 字符的位置了,而是这个位置的后一个位置。


使用一个小的测试用例,实际运行跟踪一下,看看你的程序中 r 到底是谁?再怎么变化?和你想象的逻辑是否一样?如果不一样,哪里不一样?自己哪里想错了?进步就在这个过程中哦。


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕仰7036876 #1
    对了老师,还想问您一个小问题,这个sArr[r] - 'a'是什么意思呀?为什么要减a呢?
    回复 有任何疑惑可以回复我~ 2020-11-17 23:32:45
  • liuyubobobo 回复 提问者 慕仰7036876 #2
    把每一个字符映射成为一个整数,'a' 对应 0;'b' 对应 1,以此类推。
    回复 有任何疑惑可以回复我~ 2020-11-18 06:52:39
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信