добавление беззнакового смещения - PullRequest
1 голос
/ 02 августа 2020

Итак, я решал проблему на LeetCode, в которой Input: ["flower", "flow", "flight"] Output: "fl" ... поэтому я нашел решение и отлично работал на моем локальном компиляторе Visual Studio но когда я отправил его на сервер, сервер пожаловался на следующее сообщение: «Строка 924: Char 34: ошибка выполнения: добавление беззнакового смещения к 0x6030000000a0 переполнено до 0x603000000080 (stl_vector.h). РЕЗЮМЕ: UndefinedBehaviorSanitizer: undefined-behavior / usr / bin /../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h:933:34"

и, кроме того, чтобы прояснить проблему, это ссылка на проблему на LeetCode Самый длинный общий префикс , мое решение -

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;
}

1 Ответ

1 голос
/ 02 августа 2020

Это пройдет, но не уверен в ошибке:

#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;
    }
};

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...