Nén xâu

Xem PDF




Thời gian:
Scratch 5.0s

Tác giả:
Dạng bài
Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Một xâu ký tự có thể nén lại thành một xâu mới bằng cách nén các ký tự giống nhau đứng cạnh nhau. Ví dụ trong xâu \(aaaa\) sẽ nén thành \(4a\). Hãy lập trình để nén một xâu ký tự thường theo cách trên.

Input

  • Một xâu các ký tự là chữ cái thường có tối đa \(10^5\) ký tự.

Output

  • Một xâu ký tự sau khi nén.

Example

Test 1

Input
mmaabbbeeeezh 
Output
2m2a3b4ezh

Bình luận

  • P2E1_14 8:29 p.m. 18 Tháng 2, 2025

    khó vcl

    • P2E1_14 2:21 p.m. 16 Tháng 2, 2025

      hơi quằn nha

      • KTGAME 5:57 p.m. 20 Tháng 8, 2024
        Gợi ý nếu bạn thực sự không hiểu:
        
        Ta duy trì 1 biến i tại vị trí bên trái
        sau đo duyệt while i < số kí tự (len hoặc size)
        ta sẽ để 1 biến j = i+1 tức là lấy 1 phần tử về bên phải
        đoạn duyệt kí tự
        thêm 1 vòng lặp con while khi j<= len hoặc size và xau[j]==xau[i] hoặc xau[j-1] đều như nhau: j+=1
        
        sau đó sử lý số ta chỉ cần ghi vào j-i nhưng vì số 1 sẽ không ghi nên ta xử lý trường hợp này
        đặt biến x = '' (rỗng)
        nếu j-i != 1 thì x = j-i (chuyển về string nhé)
        
        xau_result += x + xau[i]
        
        Thuật 2 con trỏ với O(N)
        
        • SBD20_Caominhduc 10:26 a.m. 4 Tháng 8, 2024

          #include <bits/stdc++.h>
          using namespace std;
          string st;
          int n;
          int main()
          {
              cin >> st;
              n=st.size();
              int cc=1;
              for(int i=0;i<n;i++)
              {
                  if(st[i]==st[i+1])
                  {
                      cc++;
                  }else
                  {
                      if(cc!=1)cout << cc << st[i];
                      else cout << st[i];
                      cc=1;
                  }
              }
              return 0;
          }
          

          Code C++ cho ai cần

          • baothanh2010 9:21 a.m. 6 Tháng 6, 2024

            include <bits/stdc++.h>

            using namespace std;
            string s;
            string s1="";
            long long d;
            int main()
            {
            cin>>s;
            for(int i=0;i<s.size();i++)
            {
            d=0;
            if(s[i-1]==s[i])
            {
            d++;
            while(s[i-1]==s[i])
            {
            d++;
            i++;
            }
            s1=s1+to_string(d)+s[i-1];
            }
            if(s[i-1]!=s[i]&&s[i]!=s[i+1])
            s1=s1+s[i];
            }
            cout<<s1;
            return 0;
            }

            • PY1F04_phan_nhat_binh 10:52 a.m. 3 Tháng 5, 2024

              cho minh xin hint python cua bai nay di

              • xthabao1 7:57 p.m. 30 Tháng 9, 2023

                Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.

                • khanhhunghack 7:56 a.m. 10 Tháng 1, 2022

                  làm phiền daicadihoc tăng time cho scratch ạ.

                  • thanhyl7a20 4:26 p.m. 12 Tháng 10, 2021

                    Bình luận bị ẩn vì nhiều phản hồi tiêu cực. Nhấp vào đây để mở.

                    • SPyofgame 7:10 p.m. 6 Tháng 6, 2020 chỉnh sửa 5

                      Spoiler Alert


                      Hint 1

                      Duyệt qua xâu, và đếm số lượng kí tự bằng nhau liền nhau.

                      Xuất kết quả và chuyển sang kí tự tiếp theo

                      Notice

                      Cẩn thận trường hợp chỉ có một kí tự đơn lẻ

                      Reference AC code | O(n) time | O(1) auxiliary space | Online Solving

                      C++
                      for (char c = getchar(), p = c; c != EOF; p = c)
                      {
                          int cnt = 0;
                          while (p == c) cnt++, c = getchar();
                          if (cnt > 1) cout << cnt;
                          cout << p;
                      }