Xử lý ký tự, chuỗi cơ bản

Bộ đề bài

# Bài tập Điểm Thời gian: Giới hạn bộ nhớ
1 Cánh Diều - DELETE - Xoá kí tự trong xâu 100 (p) 1.0s 256M
2 Cánh Diều - COUNTWORD - Đếm số từ 100 (p) 1.0s 256M
3 Cánh diều - SUBSTR2 - Xâu con 2 100 (p) 1.0s 256M
4 Cánh diều - FINDSTRING - Tìm xâu con đầu tiên 100 (p) 1.0s 256M
5 Ký tự mới 100 (p) 1.0s 640M
6 Ký tự cũ 100 (p) 1.0s 640M
7 Hoa thành thường 100 (p) 1.0s 256M
8 Số đảo ngược 100 (p) 1.0s 256M
9 Xâu đối xứng (Palindrom) 100 (p) 1.0s 640M
10 Bảng mã Ascii (HSG '18) 100 (p) 1.0s 256M
11 Nén xâu 100 (p) 1.0s 256M
12 Đếm ký tự (HSG'19) 100 (p) 1.0s 256M
13 Độ tương đồng của chuỗi 100 (p) 1.0s 1G
14 Giải nén xâu 100 (p) 1.0s 256M

1. Cánh Diều - DELETE - Xoá kí tự trong xâu

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Viết chương trình nhập vào một xâu \(s\), và một kí tự \(c\). Hãy tạo xâu mới bằng cách xoá các kí tự \(c\) trong xâu \(s\).

Input

  • Dòng đầu ghi xâu \(s\), độ dài không quá \(10^6\).

  • Dòng thứ hai ghi một kí tự (latin thường).

Output

  • In ra một xâu sau khi xử lí.

Example

Test 1

Input
123a45a6a78
a
Output
12345678

2. Cánh Diều - COUNTWORD - Đếm số từ

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Nhập vào từ bàn phím hai xâu \(s_1\), \(s_2\), mỗi xâu không chứa kí tự dấu cách dư ở đầu, cuối xâu, phân cách giữa các từ chỉ là \(1\) dấu cách. Nếu xâu không chứa dấu cách thì nó là một từ, trong trường hợp ngược lại, dấu cách phân tách các từ trong xâu. Viết chương trình in ra tổng số từ trong cả hai xâu.

Input

  • Dòng đầu ghi xâu \(s_1\)

  • Dòng thứ \(2\) ghi xâu \(s_2\)

Các xâu chỉ gồm các kí tự latin, kí tự chữ số và dấu cách, có độ dài không quá \(10^6\)

Output

  • Ghi một số nguyên là tổng số từ trong hai xâu.

Example

Test 1

Input
Duoi trang quyen da goi he
Dau tuong lua luu lap loe dam bong
Output
14

3. Cánh diều - SUBSTR2 - Xâu con 2

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Xác định xâu con \(x\) của xâu \(y\) biết \(x\) gồm các ký tự trong đoạn chỉ số \([L;R)\) của \(y\) (từ \(L\) tới \(R\), nhưng không bao gồm \(R\))

Cho một xâu kí tự \(y\) chỉ gồm các kí tự latin viết thường có thể chứa dấu cách. Có \(N\) truy vấn, mỗi truy vấn gồm hai số nguyên \(L, R\) \((0\le L \le R < \texttt{len}(y))\).

Yêu cầu: với mỗi truy vấn, in ra xâu con của xâu \(y\) từ chỉ số \(L\) tới chỉ số \(R\)?

Input

  • Dòng đầu ghi xâu y có độ dài không quá \(10^6\); xâu gồm các kí tự latin và số.

  • Dòng thứ hai ghi số nguyên \(N\) là số lượng truy vấn \((1\le N\le 100)\)

  • \(N\) dòng tiếp theo mỗi dòng ghi hai số nguyên \(L, R\)

Output

  • Với mỗi truy vấn, in ra xâu con từ chỉ số \(L\) đến chỉ số \(R\) của xâu

Example

Test 1

Input
0123456 
3 
2 5 
2 3 
0 7 
Output
234 
2 
0123456

4. Cánh diều - FINDSTRING - Tìm xâu con đầu tiên

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Hàm \(A.find(B)\) trả về vị trí đầu tiên xuất hiện của xâu \(B\) trong xâu \(A\). Nếu không tồn tại xâu con \(B\) trong \(A\), trả về \(-1\).

Sử dụng hàm find thực hiện các yêu cầu sau:

Cho một xâu \(S\) và \(Q\) truy vấn, mỗi truy vấn gồm có một xâu \(x\): hãy tìm vị trí đầu tiên xuất hiện của xâu \(x\) trong xâu \(S\) ban đầu. Xâu gồm các kí tự latin gồm chữ và số.

Input

  • Dòng đầu ghi xâu \(S\) có độ dài không quá \(10^6\)

  • Dòng thứ hai ghi \(Q\) là số lượng truy vấn

Tiếp theo là \(Q\) dòng, mỗi dòng ghi một xâu \(x\) có độ dài không quá \(10^6\)

Output

  • Với mỗi truy vấn ghi kết quả trên 1 dòng là vị trí đầu tiên xuất hiện xâu \(x\) trong \(S\)

Example

Test 1

Input
Cai xac xinh xinh 
2 
xinh 
be   
Output
8
-1

5. Ký tự mới

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 640M Input: bàn phím Output: màn hình

Viết chương trình nhập vào một ký tự in hoa, in ra ký tự thường tương ứng.

Input

  • Một ký tự là chữ cái in hoa.

Output

  • In ra ký tự thường tương ứng.

Example

Test 1

Input
A 
Output
a

6. Ký tự cũ

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 640M Input: bàn phím Output: màn hình

Viết chương trình nhập vào một ký tự thường, in ra ký tự in hoa tương ứng.

Input

  • Một ký tự là chữ cái in thường.

Output

  • In ra ký tự hoa tương ứng.

Example

Test 1

Input
a 
Output
A

7. Hoa thành thường

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho một chuỗi kí tự gồm \(n\)n kí tự bất kì \((n≤100)\). Hãy đổi tất cả chữ hoa có trong chuỗi thành chữ thường. Xuất chuỗi ra màn hình.

Input

  • Gồm một dòng duy nhất là một chuỗi kí tự

Output

  • In chuỗi đã đổi ra màn hình

Example

Test 1

Input
4I1K2D14Ti 
Output
4i1k2d14ti

8. Số đảo ngược

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Cho một số nguyên dương \(n\). (\(n\) có không quá \(255\) chữ số).
Yêu cầu: Hãy tìm số đảo ngược của \(n\).

Input

  • Số nguyên dương \(n\).

Output

  • Số nguyên dương \(n\).

Example

Test 1

Input
111111111122222222223333333333
Output
333333333322222222221111111111

9. Xâu đối xứng (Palindrom)

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 640M Input: bàn phím Output: màn hình

Cho một xâu kí tự, hãy kiểm tra tính đối xứng của nó. Một xâu kí tự được gọi là xâu đối xứng nếu ta đọc xâu này từ trái sang phải hoặc từ phải sang trái là như nhau.

Input

  • Một xâu ký tự \(S\).

Output

  • In ra \(YES\) nếu \(S\) là xâu đối xứng, ngược lại in ra \(NO\).

Constraints

  • \(1 \leq S.size() \leq 255\)

Example

Test 1

Input
abccba 
Output
YES

Test 2

Input
abcccc 
Output
NO

10. Bảng mã Ascii (HSG '18)

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trong bảng mã ASCII, \(26\) kí tự chữ cái thường từ ‘a’ đến ‘z’ được mã hóa tương ứng bằng các số tự nhiên từ \(97\) đến \(122\).

Cho một xâu kí tự \(S\) chỉ chứa toàn các kí tự chữ cái thường. Gọi \(P\) là xâu mã hóa tương ứng của xâu \(S\) bằng cách mã hóa từng ký tự trong \(S\) (theo bảng mã ASCII) và viết liên tiếp nhau. Ví dụ: \(S\) = ‘ab’ thì \(P\) = ‘9798’.

Hãy viết chương trình nhập vào từ bàn phím một xâu đã mã hóa \(P\) và in ra màn hình xâu kí tự \(S\).

Input

  • Một xâu đã mã hóa \(P\).

Output

  • In ra màn hình xâu ký tự \(S\).

Constraints

  • \(1 \leq P.size() \leq 255\)

Example

Test 2

Input
979899 
Output
abc

Test 3

Input
1009711097110103 
Output
danang

11. Nén xâu

Đ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

12. Đếm ký tự (HSG'19)

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Hãy viết chương trình thực hiện nhiệm vụ sau:

Nhập vào từ bàn phím một xâu kí tự \(S\), hãy in ra số kí tự chỉ xuất hiện đúng 1 lần trong xâu \(S\).

Input

  • Dòng đầu tiên và duy nhất chứa 1 xâu \(S\) (chỉ chứa các kí tự trong tập \(\{a,b,\dots z\}\), không chứa dấu cách) \((|S| \leq 255)\).

Output

  • In ra số kí tự chỉ xuất hiện đúng 1 lần trong xâu \(S\).

Example

Test 1

Input
abbacdmedc 
Output
2

13. Độ tương đồng của chuỗi

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Conan đang trong một vụ án cực kì hóc búa, đã có đến 2 vụ án mạng xảy ra. Tại hiện trường 2 vụ án đều để lại dòng chữ kì lạ. Có vẻ như đó chính là gợi ý mà hung thủ để lại. Hung thủ dường như đang cố thách thức vị thám tử lừng danh của chúng ta. Bằng tài năng suy luận tài tình của mình, Conan đã khám phá đã ra được gợi ý của hung thủ chính là sự tương đồng của 2 dòng chữ đó. Tuy nhiên các dòng chữ rất dài, Conan giỏi suy luận nhưng lại không giỏi lập trình. Bạn là một lập trình viên giỏi, bạn hãy giúp Conan nhé.

Yêu cầu: Cho 2 chuỗi kí tự \(a\) và \(b\). Hãy xác định xem chuỗi \(a\) và \(b\) giống nhau bao nhiêu kí tự?

Input

  • Dòng thứ nhất là chuỗi kí tự \(a (1 \leq |a| \leq 10^{5})\).
  • Dòng thứ hai là chuỗi kí tự \(b\) \((1 \leq |b| \leq 10^{5})\).
  • Các chuỗi chỉ gồm các kí tự từ \(\texttt{a}\) \(\rightarrow\) \(\texttt{z}\), \(|x|\) là số lượng ký tự của chuỗi \(x\).

Output

  • Gồm một dòng duy nhất là số lượng kí tự giống nhau.

Example

Test 1

Input
aaabb
baa
Output
3
Note

Cả 2 chuỗi đều có 2 kí tự a và 1 kí tự b. Vậy kết quả in ra 3.

14. Giải nén xâu

Điểm: 100 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trong máy tính, để tiết kiệm bộ nhớ, người ta thường tìm cách nén dữ liệu. Trong việc nén văn bản, ta sư dụng một phương pháp đơn giản đươc mô tả thông qua ví dụ sau:

Ví dụ:

Với xâu ký tự: "aaaabbb" sẽ được nén lại thành xâu "4a3b". Với xâu ký tự "aaab" sẽ được nén lại thành "3ab".

Cho một xâu \(S\) gồm các ký tự thuộc tập \('a'...'z'\). Gọt \(St\) là xâu nén của xâu \(S\) theo phương pháp được mô tả như trên. Xâu \(St\) gồm \(N\) ký tự thuộc tập các ký tự \('a'...'z'\), \('0',...'9'\)

Hãy giải nén xâu \(St\) để được xâu gốc \(S\).

Input

  • Một xâu ký tự \(St\).

Output

  • Một xâu ký tự \(S\) sau khi giải nén.
  • Đề đảm bảo số lượng kí tự sau khi giải nén không quá \(10^{7}\).

Constraints

  • \(1 \leq N \leq 10000\)

Example

Test 1

Input
2m2a3b4ezh 
Output
mmaabbbeeeezh