Tổng Hợp Bài Tập String Trong Java - Có Lời Giải - Deft Blog

Mục lục

    • 0.1 B1. Character duplicate
    • 0.2 B2. String Anagram
  • 1 B3. Character unique
    • 1.1 B4. Reverse String
    • 1.2 Bài 5. String not contains digit
    • 1.3 B6. Count number of vowels and consonants
    • 1.4 B7. Convert string number to int value
    • 1.5 B8. Replace character
    • 1.6 B9. Revert string by word
    • 1.7 B10. Check string palindrome
    • 1.8 B11. Remove character duplicate
    • 1.9 B12. Find longest palindrome substring
    • 1.10 B13. Find interleavings string
    • 1.11 B14. Longest substring without repeating
    • 1.12 B15. Find second most frequent character in a given string
    • 1.13 B16. Print all permutations of a string
    • 1.14 B17. Divide a string
    • 1.15 B18. Remove all adjacent duplicates 
    • 1.16 B19. Append string together

String trong java là một chuỗi các ký tự trong java. Trong công việc lập trình hằng ngày chúng ta chắc hẳn sẽ phải đối mặt với rất nhiều trong việc xử lý chuỗi. Để chuẩn bị trước các tình huống khó khăn thì mình có sưu tầm một số bài tập về String hay + khó để các bạn luyện tập trước.

Không những luyện tư duy xử lý chuỗi mà các bài tập này giúp chúng ta nhớ lại toàn bộ kiến thức về chuỗi trong java. 

B1. Character duplicate

Tìm và in ra các ký tự xuất hiện nhiều hơn một lần trong String cho trước không phân biệt chữ hoa hay chữ thường. Nếu các ký tự trong chuỗi đều là duy nhất thì xuất ra “NO”. Ví dụ chuỗi “Java” thì có ký tự ‘a’ hoặc String “JaVA” cũng có kết quả tương tự.

Gợi ý: Sử dụng HashMap, 

Source code tham khảo

B2. String Anagram

Kiểm tra 2 chuỗi có là đảo ngược của nhau hay không. Nếu có xuất ra “OK” ngược lại “KO”. Ví dụ “word” và “drow” là 2 chuỗi đảo ngược nhau.

Source code tham khảo

B3. Character unique

Tìm ký tự chỉ xuất hiện một lần trong chuỗi, nếu có nhiều hơn một thì xuất ra màn hình ký tự đầu tiên. Nếu không có ký tự nào unique xuất ra “NO”.

Gợi ý:

  • Sử dụng LinkedHashMap. 
  • HashMap kết hợp với duyệt lại chuỗi để tìm ra ký tự đầu tiên xuất hiện một lần.

Source code tham khảo

B4. Reverse String

Đảo ngược chuỗi sử dụng vòng lặp và đệ quy. 

Gợi ý: Sử dụng StringBuilder hoặc StringBuffer để dễ dàng thao tác hơn, tránh sử dụng String ví nó có tính chất immutable việc thao tác trên chúng sẽ khiến nó tạo thêm một String mới gây hao tổn bộ nhớ. 

Source code tham khảo

Bài 5. String not contains digit

Kiểm tra một chuỗi có chứa chữ số hay không, nếu có in ra false ngược lại true.

Ví dụ

“abc”, “” => true

“1abc”, “abc1”, “123”, “a1bc”, null => false

Gợi ý: Sử dụng java regex nếu bạn quen với việc sử dụng chúng. Đây cũng là cách ngắn gọn nhất. Hoặc bạn có thể loop và kiểm tra từng ký tự trong chuỗi.

Source code tham khảo

B6. Count number of vowels and consonants

Đếm số lượng ký tự nguyên âm và phụ âm xuất hiện trong chuỗi. Ví dụ chuỗi “java” có 2 nguyên âm “a” và 2 phụ âm “j” và “v”.

Gợi ý: Dùng switch case để đếm số lượng ký tự nguyên âm. Số phụ âm sẽ là độ dài của chuỗi trừ cho số lượng phụ âm.

Source code tham khảo

B7. Convert string number to int value

Chuyển chuỗi số nguyên sang int value. Ví dụ “5646” thành int = 5646.  

Gợi ý: Dùng Integer wrapper class để convert string sang int nhanh chóng.

Source code tham khảo

B8. Replace character

Cho một chuỗi str, chuyển các ký tự được chỉ định sang một ký tự khác cho trước. Ví dụ “shareprogramming.net” chuyển ‘e’ sang ‘*’ kết qủa “shar*programming.n*t”.

Gợi ý: Các bạn có thể dùng String#replace() hoặc StringBuilder để loop và thao tác.

Source code tham khảo

B9. Revert string by word

Đảo ngược các ký tự của chuỗi cách nhau bởi dấu cách mà không dùng thư viện. Ví dụ “I am developer ” => “developer am I”. Các ký tự bên trong chỉ cách nhau đúng một dấu khoảng cách.

Gợi ý: Các bạn cần loại bỏ dấu cách ở đầu và cuối câu, thao tác cắt chuỗi theo dấu cách và dùng StringBuilder hoặc StringBuffer để nối chuỗi.

Source code tham khảo

B10. Check string palindrome

Chuỗi palindrome là chuỗi sau khi đảo ngược và chuỗi ban đầu hoàn toàn giống nhau, ví dụ “aba” là một chuỗi “aba”

Gợi ý: Đảo ngược chuỗi và so sánh với chuỗi ban đầu hoặc loop và so sánh từng cặp chữ một.

Source code tham khảo

B11. Remove character duplicate

Cho một chuỗi str, xoá các ký tự xuất hiện nhiều hơn một lần trong chuỗi và chỉ giữ lại ký tự đầu tiên, vi dụ bananas => bans

Gợi ý: Sử dụng HashSet hoặc ArrayList lưu các ký tự đã xuất hiện trong lúc duyệt. Nếu ký tự được duyệt chưa có tỏng HashSet hoặc ArrayList thì cộng ký tự đó vào chuỗi kết quả và thêm ký tự đó vào HashSet hoặc ArrayList. Lưu ý sử dụng StringBuilder hoặc StringBuffer để thao tác cộng chuỗi.

Source code tham khảo

B12. Find longest palindrome substring

Tìm substring palindrome dài nhất trong một chuỗi cho trước. Biết rằng chuỗi palindrome là chuỗi sau khi đảo ngược và chuỗi ban đầu giống nhau.

Source code tham khảo

B13. Find interleavings string

Tìm xem có bao nhiêu chuỗi xen kẽ từ 2 chuỗi cho trước. Giả sử rằng các ký tự trong 2 chuỗi là khác nhau.

Ví dụ cho hai chuỗi “WX” và “YZ” thì các chuỗi có thể tạo nên là: YWZX, WYZX, YWXZ, WXYZ, YZWX, WYXZ.

Gợi ý: Sử dụng đệ quy bóc tách từng ký tự trong từng chuỗi ra và thử vào chuỗi kết quả. 

interleavings string

Source code tham khảo

B14. Longest substring without repeating

Viết chương trình tìm độ dài chuỗi con lớn nhất mà các ký tự không trùng lặp.

Ví dụ: “pickoutthelongestsubstring” => “ubstring”. 

Gợi ý: Sử dụng LinkedHashMap<Character, Integer>(key là ký tự tại vị trí index là value) duyệt qua từng ký tự trong chuỗi và kiểm tra.

Source code tham khảo

B15. Find second most frequent character in a given string

Viết chương trình tìm ký tự xuất hiện nhiều thứ 2 trong chuỗi. Nếu nhiều ký tự thoả thì in bất kỳ ký tự nào. Không phân biệt chữ hoa với chữ thường.

Ví dụ: “Successes” => “c”

Gợi ý: Khai báo mảng int [256] tương ứng với số lượng ký tự có thể có. Duyệt chuỗi với mỗi lần xuất hiện thì tăng lên 1 tại [str.charAt[i]]. Sau khi đã có số lần xuất hiện thì chỉ việc so sánh và lấy lý tự xuất hiện nhiều thứ nhì bằng nhiều cách như sắp xếp, duyệt etc

Source code tham khảo

B16. Print all permutations of a string

Viết chương trình in tất cả các chuỗi có thể có từ các ký tự của một chuỗi cho trước.

Ví dụ: “PQR” => PPP PPQ PPR PQP PQQ PQR PRP PRQ PRR QPP QPQ QPR QQP QQQ QQR QRP QRQ QRR RPP RPQ RPR RQP RQQ RQR RRP RRQ RRR. 

Gợi ý sử dụng đệ quy theo quy tắc sau

/** * PQR P * I = 0 => * PQR PP I=0 PQR PPP * PQR PP I=1 PQR PPQ * PQR PP I=2 PQR PPR * I = 1 => * PQR PQ I=0 PQR PQP * PQR PQ I=1 PQR PQQ * PQR PQ I=2 PQR PQR */

Source code tham khảo

B17. Divide a string

Cho một chuỗi str và số nguyên n >= 0. Chia chuỗi str ra làm các phần bằng nhau với n ký tự. Nếu chuỗi không chia được thì xuất ra màn hình “KO”.

Ví dụ:

abcdefghijklmnopqrstuvwxy, n = 5 =>abcde fghij klmno pqrst uvwxy

Source code tham khảo

B18. Remove all adjacent duplicates 

Xoá tất cả các ký tự liền kề và giống nhau. Ví dụ aabaarbarccrabmq thì kết quả là brmq.

Source code tham khảo

B19. Append string together

Cho 2 string, gắn chúng lại với nhau, nếu 2 chuỗi có độ dài không bằng nhau thì tiến hành cắt bỏ các ký tự đầu của string dài hơn cho đến khi chúng bằng nhau thì tiến hành gắn lại. Ví dụ Welcome và home => comehome.

Source code tham khảo

Từ khóa » Thư Viện String Trong Java