2016-08-05 14 views
8

Cho rằng 2 chuỗi:Tìm xem mỗi nhân vật trong 1 chuỗi được tồn tại trong một chuỗi khác, nhanh hơn so với O (n^2)

String stringA = "WHATSUP"; 
String stringB = "HATS"; 

tôi muốn tìm hiểu xem mỗi nhân vật trong stringB HATS tồn tại trong stringA

Trong phương pháp tiếp cận cơ sở, quy trình có thể được thực hiện trong vòng lặp lồng nhau mà độ phức tạp tính toán của nó là O (n^2).

for(int i = 0; i < stringA.length(); i++){ 
    for(int j = 0; j < stringB.length(); j++){ 
     if(stringA.charAt(i) == stringB.charAt(j)) 
      //do something 
    } 
} 

Tôi đang tìm giải pháp nhanh hơn để giải quyết vấn đề này.

+0

Điều này giống như vấn đề về bài tập về nhà; nhưng bạn có thể chỉ cần tạo hashsets cho cả hai chuỗi và sử dụng 'containsAll' – NullUserException

Trả lời

10

Có một thuật toán thời gian tuyến tính.

  1. Chuyển đổi số stringA thành nhóm băm ký tự có thử nghiệm thành viên O (1).
  2. Lặp lại từng ký tự trong stringB.
  3. Nếu một trong các ký tự không nằm trong bộ băm của bạn, thử nghiệm không thành công.
  4. Nếu không có lỗi, thử nghiệm thành công.
+0

Nếu' stringA' dài hơn 'stringB,' không thể chuyển đổi làm chậm quá trình trong thời gian dài? – Nerdizzle

+0

@Nerdizzle: Có, các trường hợp cụ thể có thể chậm hơn bằng cách sử dụng phương pháp này. – recursive

+0

Bạn không thể tạo hai hashsets và sử dụng 'containsAll()'? – NullUserException

Các vấn đề liên quan