LeetCode findAnagrams: 添加无符号偏移错误

LeetCode findAnagrams: addition of unsigned offset error

我将以下代码提交到 leetcode 时出现以下错误,我不知道为什么,因为代码在我的本地机器上运行良好。我怎样才能重现此错误并找出导致它的确切原因?

Line 1061: Char 9: runtime error: addition of unsigned offset to 0x7ffdd1b0d720 overflowed to 0x7ffdd1b0d71e (basic_string.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/basic_string.h:1070:9
bool find_match(const std::map<char, std::pair<int, int>> &m){
  for(const auto& [k, v] : m){
    if(v.first != v.second) return false;
  }
  return true;
}

std::vector<int> findAnagrams(std::string s, std::string p){
  std::vector<int> result;
  std::map<char, std::pair<int, int>> search;
  for(const char& c : p){
    search[c].first++;
    search[c].second = 0;
  }

  for(int i = 0; i < s.size(); i++){
    if(p.find(s[i]) != p.npos)
      search[s[i]].second++;
    
    if(find_match(search))
      result.push_back(1 + i - p.size());

    if((1 + i - p.size() >= 0) && (p.find(s[1 + i - p.size()]) != p.npos))
      search[s[1 + i - p.size()]].second--;
  }

  return result;
}

在开头存储字符串的长度p,然后使用它。

vector<int> findAnagrams(string s, string p)
{
    int pLen = p.size();
    ....
}

将代码中的所有 p.size() 替换为 pLen。那你就可以开始了。

就像 Sam Varshavchik 先生在评论部分解释的那样,1 + i - p.size() >= 0 这是导致错误的原因。

你可以在leetcode中打印1 + i - p.size() >= 0的值,你就能看到错误了。