[Chuỗi] – Thuật toán tìm chuỗi con

Tìm một chuỗi con trong một chuỗi có sẵn là bài toán thường gặp. Hầu hết các ngôn ngữ lập trình đều cung cấp hàm này. Tuy nhiên, nếu bạn nhận được yêu cầu viết chương trình để thực hiện điều này thì bạn sẽ làm thế nào. Bài dưới đây sẽ nói về điều đó.

Yêu cầu

Viết chương trình khởi tạo một chuỗi, sau đó nhập một chuỗi mới và kiểm tra xem chuỗi mới có xuất hiện trong chuỗi đã có trước đó hay không?

Phân tích và tìm cách giải

  • Đầu vào: s=”thanh pho da nang”, Chuỗi mới s1={nang}
  • Đầu ra: In ra thông báo chuỗi s1 có xuất hiện trong chuỗi s hay không?
  • Phân tích:

– Bạn cần lấy chữ đầu tiên của chuỗi s1 để so sánh với các ký tự của s.

– Nếu không có ký tự nào khớp bạn sẽ thông báo ngay s1 xuất hiện trong s.

– Nếu có ký tự khớp bạn so sánh hết các ký tự của chuổi s1 và các ký tự của chuỗi s tương ứng từ vị trí khớp.

    + Nếu khớp hoàn toàn bạn thông báo đã tìm thấy

    + Nếu không khớp hoàn toàn bạn quay lại vòng lặp chính để thực hiện cho đến vị trí k=s.length-s1.length

Cách biểu diễn thuật toán

Trong trường hợp này, tôi sử dụng ngôn ngữ giả.

Declare   String s="thanh pho da nang", s1

Boolean found=false

Int i,j

Input s1

If s1.lenght >s.length

   Print "Chuoi can tim phai ngan hon chuoi chua no"

   Exit

Else {

   Loop i from 0 to s.length – s1.lenght

     If(s[i]=s1[0]) then {

        found=true

        Loop j from 1 to s1.length-1 {

           if s[i+j]<>s[j] then

              found=false

              break //Thoát khỏi vòng lặp j
         }

        if found then break //thoát khỏi vòng lặp I vì đã tìm thấy
      }

   If found

      Print s1 + ‘ chua trong chuoi ’ + s

   Else

      Print s1 + ‘ khong co trong chuoi ’ + s
}

Bài tiếp: Thuật toán tách chuỗi

Bài trước: Các thuật toán cơ bản về chuỗi

Đối tác tuyển dụng