Lỗi out of range c++

Nó báo lỗi như này là sao ạ?
terminate called after throwing an instance of ‘std::out_of_range’
what(): basic_string::at: __n (which is 0) >= this->size() (which is 0)
link hackkerrank: https://www.hackerrank.com/challenges/reduced-string/problem

> #include <bits/stdc++.h>

> using namespace std;

> string super_reduced_string(string s){
>     // Complete this function
>     int count = -1;
>     for(int i=0;i<s.length()-1;i++) if(s.at(i)==s.at(i+1)){ count = i; break;}else{count=-1;}
>     while(count != -1){
>         s.erase(count,2);
>         for(int i=0;i<s.length()-1;i++) if(s.at(i)==s.at(i+1)){ count = i;break;}else{count=-1;}
>     }
>    return s;
> }

> int main() {
>     string s;
>     cin >> s;
>     string result = super_reduced_string(s);
>     cout << result << endl;
>     return 0;
> }

Chỗ này

count == -1 thì sao?

Có vẻ như bạn chạy vòng while đến mức xâu s rỗng. Bạn thử in ra s sau vòng for xem sao.

1 Like

Bài này có thể giải trong O(n) time và space, và ít phức tạp hơn.

2 Likes

Truy cập phần tử ngoài khoảng cho phép
Ví dụ như khi string.length = 5 mà bạn lại truy cập s[7] hoặc s[i] với i<0 thì sẽ bị như thế

2 Likes

Cảm ơn mọi người em fix được rồi. Thứ 1 là do s.length()-1 chỉ nhận giá trị dương mà -1<0 nên nó bị lỗi. Thứ 2 là sau dòng s.erase() em quên gán count = -1 nên nó lặp vô tận khi vòng for phí dưới không thục hiện.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?