Tìm cách tách S thành ít nhất các xâu, sao cho mỗi xâu đều là Lyndon word

Vietjack.me giới thiệu bộ câu hỏi ôn tập Tin học có đáp án được biên soạn bám sát chương trình học giúp bạn ôn luyện và bổ sung kiến thức môn Tin học tốt hơn. Mời các bạn đón xem:

1 203 lượt xem


Tìm cách tách S thành ít nhất các xâu, sao cho mỗi xâu đều là Lyndon word.

Đề bài: Lyndon word là các xâu khác rỗng, mà có thứ tự từ điển nhỏ hơn tất cả các xâu thu được bằng phép xoay của nó.

Cho một xâu S. Tìm cách tách S thành ít nhất các xâu, sao cho mỗi xâu đều là Lyndon word.

Lời giải:

void lyndon(string s) {

          int n = (int) s.length();

          int i = 0;

          while (i < n) {

                   int j = i + 1, k = i;

                   while (j < n && s[k] <= s[j]) {

                             if (s[k] < s[j]) k = i;

                             else ++k;

                             ++j;

                   }

                   while (i <= k) {

                             cout << s.substr(i, j - k) << ' ';

                             i += j - k;

                   }

          }

          cout << endl;

}

 

1 203 lượt xem


Xem thêm các chương trình khác: