旅人_在路上 2025-04-16 18:33 采纳率: 33.3%
浏览 32

力扣763为什么这样写不对?

力扣763:为什么这样写不对?_


```c++
 vector<int> partitionLabels(string s) {
        unordered_map<char,int>c;
        vector<int>result;
        for(int i=s.size()-1;i>=0;i--){
            c[s[i]]=i;
        }
        int left=0;
        int right=0;
        for(int i=0;i<s.size();i++){
            right=max(c[s[i]],right);
            //在此区间有没有更到的覆盖范围
            if(i==right){
                result.push_back(right-left+1);
                left=right+1;
            }
        }
        return result;
    }

```_

  • 写回答

7条回答 默认 最新

  • 阿里嘎多学长 2025-04-16 18:34
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    力扣763为什么这样写不对?

    你的问题是关于力扣763的partitionLabels问题,代码中使用unordered_map来存储字符和最后一个出现的索引,但是你遇到了问题。

    问题可能是因为你没有正确地使用unordered_map,或者没有正确地遍历字符串。下面是一个正确的解决方案:

    vector<int> partitionLabels(string s) {
        unordered_map<char, int> lastPos;
        for (int i = 0; i < s.size(); i++) {
            lastPos[s[i]] = i;
        }
        vector<int> res;
        int start = 0, end = 0;
        for (int i = 0; i < s.size(); i++) {
            end = max(end, lastPos[s[i]]);
            if (i == end) {
                res.push_back(end - start + 1);
                start = i + 1;
            }
        }
        return res;
    }
    

    这个解决方案使用unordered_map来存储字符和最后一个出现的索引,然后遍历字符串,使用end变量来记录当前字符的最后一个出现的索引,如果当前索引等于end,就将当前partition添加到结果中,并将start变量更新为i + 1。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月16日