添加无符号偏移量

Posted

技术标签:

【中文标题】添加无符号偏移量【英文标题】:addition of unsigned offset 【发布时间】:2020-08-02 12:02:39 【问题描述】:

所以我在 LeetCode 上解决了一个问题,其中 Input: ["flower","flow","flight"] 输出:“fl”.. 所以我想出了一个解决方案,并在我的本地 Visual Studio 编译器上完美运行,但是当我将它提交到服务器时,服务器抱怨以下消息“第 924 行:字符 34:运行时错误:添加无符号偏移到 0x6030000000a0 溢出到 0x603000000080 (stl_vector.h) 摘要:UndefinedBehaviorSanitizer:未定义行为 /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h :933:34"

为了进一步澄清问题,这是 LeetCode 上的问题链接 Longest Common Prefix 我的解决方案是

string longestCommonPrefix(vector<string>  strs) 

    
    string temp;        
    int count = 0;
    int new_count = 0;
    string::iterator iter1;
    string::iterator iter2;

    for (int i = 0; i != strs.size(); ++i)         
        
        if (i != str.size() - 1) 
            cout << "if 1\n";
            iter1 = strs[i].begin();
            iter2 = strs[i + 1].begin();
            
            while (iter1 != str[i].end() && iter2 != str[i + 1].end()) 
                 
                if (*iter1 == *iter2 ) 
                    temp.push_back(*iter1);
                    ++count;
                
                
                if (*iter1 != *iter2)                   
                    break;              

                ++iter1;
                ++iter2;
            
        

        if (i == str.size() - 1) 
                        
            iter1 = strs[i].begin();
            iter2 = strs[i - 1].begin();

            while (iter1 != str[i].end() && iter2 != str[i - 1].end()) 

                if (*iter1 == *iter2 ) 
                    temp.push_back(*iter1);
                    ++new_count;
                

                if (*iter1 != *iter2)                   
                    break;
                

                ++iter1;
                ++iter2;
            

            break;
        


        i += 1;     
    

    new_count = min(count, new_count);

    

    if ( new_count == 0) 
        return "";
    

    temp = string(temp.substr(0, new_count));

    return temp;

【问题讨论】:

失败的测试用例在哪里? 我在遵循此代码时遇到了问题。您能否至少将str 重命名为strs 之类的名称,以便更容易将其视为字符串向量,您能否在代码块之前用英文描述您的算法? 那里有一个鬼鬼祟祟的i += 1;,而你也在for循环中做++i......因为你检查i != str.size()有可能你过冲......恕我直言,这是一个简单的错字...因此应该关闭问题。 无论您是否得到错误答案,运行here 时代码都不会爆炸,因为您向我们展示了测试。那么那个测试是失败的案例吗? 如果您有导致问题的输入,那么您还可以使用硬编码的输入创建一个程序,并使用调试器捕获崩溃以查看它在您的代码中发生的时间和位置,并检查所有相关变量的值。您还可以使用调试器逐个语句逐句执行代码,以确保它完成您真正期望它执行的操作。 【参考方案1】:

这会通过,但不确定是否存在错误:

#include <cstdint>
#include <string>

struct Solution 
    static std::string longestCommonPrefix(
        const std::vector<std::string>& strs
    ) 
        std::string longest = "";

        for (std::size_t letter = 0; std::size(strs) > 0; longest += strs[0][letter], ++letter) 
            for (std::size_t word = 0; word < std::size(strs); ++word) 
                if (
                    letter >= std::size(strs[word]) ||
                    (word > 0 && strs[word][letter] != strs[word - 1][letter])
                ) 
                    return longest;
                
            
        

        return longest;
    
;


参考文献

有关其他详细信息,您可以查看Discussion Board。有很多公认的解决方案,有各种languages 和解释、高效的算法,以及渐近的time/space 复杂性分析1, 2

【讨论】:

感谢您花时间解决问题,但这不是我从 *** 社区获得解决方案的意图,我的目的是找出问题所在。非常感谢

以上是关于添加无符号偏移量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 contentEditable 获取 iframe 中当前插入符号位置的像素偏移量

如何合并具有特定移位(偏移)的两个位图?

计算十六进制偏移量

UISearchController 在编辑时添加偏移量

如何在 Oracle 11g 的“选择”查询中添加偏移量?

转换为纪元时间戳添加小时偏移量