Hướng dẫn giải của Nén xâu


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Ý tưởng:

  1. Khởi tạo một biến đếm ban đầu bằng 1 và một biến lưu trữ ký tự đầu tiên trong chuỗi.
  2. Duyệt qua từng ký tự trong chuỗi từ vị trí thứ 2 đến cuối chuỗi.
  3. So sánh ký tự hiện tại với ký tự trước đó:
    • Nếu hai ký tự giống nhau, tăng biến đếm lên 1.
    • Nếu hai ký tự khác nhau, tiến hành ghi lại ký tự trước đó và số lần lặp lại vào chuỗi kết quả.
  4. Sau khi kết thúc vòng lặp, ghi lại ký tự cuối cùng và số lần lặp lại vào chuỗi kết quả.
  5. Trả về chuỗi kết quả sau khi đã mã hóa.

Lời giải tham khảo

void printRLE(string str)
{
    int n = str.length();
    for (int i = 0; i < n; i++) {

        // Count occurrences of current character
        int count = 1;
        while (i < n - 1 && str[i] == str[i + 1]) {
            count++;
            i++;
        }
        // Print character and its count
        cout << str[i] << count;
    }
}

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 4
    hohoanghai5042011  đã bình luận lúc 15, Tháng 1, 2024, 13:40

    # include <iostream>

    #include <string>

    using namespace std; string runLengthEncoding(const string& input) { string result; int count = 1; for (int i = 0; i < input.length(); ++i) { if (i + 1 < input.length() && input[i] == input[i + 1]) { count++; } else { result += input[i] + to_string(count); count = 1; } } return result; } int main() { int T; cin >> T; for (int i = 0; i < T; ++i) { string S; cin >> S; string encodedString = runLengthEncoding(S); cout << encodedString << endl; } return 0; } full ac 100%