Cho 2 chuỗi như bangalore và blr, trả lại xem chuỗi có xuất hiện như là một chuỗi của chuỗi kia hay không. Trường hợp trên trả về true trong khi bangalore và brl trả về false.Sự xuất hiện chuỗi phụ trong một chuỗi
Trả lời
Chiến lược tham lam nên hoạt động cho vấn đề này.
- Tìm chữ cái đầu tiên của chuỗi con nghi ngờ (BLR) trong chuỗi lớn (* b * angalore)
- Tìm chữ cái thứ hai bắt đầu từ chỉ số của chữ cái đầu tiên cộng với một (Ương Già * l * quặng)
- Tìm chữ cái thứ ba bắt đầu từ chỉ mục của chữ cái thứ hai cộng một (o * r * e)
- Tiếp tục cho đến khi bạn không thể tìm thấy chữ cái tiếp theo của chuỗi trong chuỗi (không khớp) hoặc bạn chạy ra khỏi các chữ cái trong các subsequence (bạn có một trận đấu).
Đây là một mẫu mã trong C++:
#include <iostream>
#include <string>
using namespace std;
int main() {
string txt = "quick brown fox jumps over the lazy dog";
string s = "brownfoxzdog";
int pos = -1;
bool ok = true;
for (int i = 0 ; ok && i != s.size() ; i++) {
ok = (pos = txt.find(s[i], pos+1)) != string::npos;
}
cerr << (ok ? "Found" : "Not found") << endl;
return 0;
}
Tôi đoán nó không thể tốt hơn O (n)? –
@princessofpersia Không, không phải không có tiền xử lý. Nếu bạn có một văn bản lớn, và cần phải liên tục truy vấn nó cho các chất nền, tôi nghĩ bạn có thể tối ưu hóa nó một chút: cho mỗi chữ cái của bảng chữ cái, lưu trữ một danh sách sắp xếp các lần xuất hiện của nó trong văn bản. Sau đó, bạn có thể thực hiện tìm kiếm trong 'O (K * logN)', trong đó 'K' là số chữ cái trong chuỗi con, và' N' là số chữ cái trong văn bản. – dasblinkenlight
logN cho tìm kiếm nhị phân của chuỗi? –
Tìm chiều dài của longest common subsequence. Nếu giá trị này bằng với độ dài của chuỗi nhỏ, hãy trả về true
Giống như dùng búa tạ để giết một con ruồi! LCS là O (N * M), nó sẽ chậm hơn tham lam, đặc biệt là khi không có trận đấu. – dasblinkenlight
Có, bạn đã đúng. – MBo
// Solution 1
public static boolean isSubSequence(String str1, String str2) {
int i = 0;
int j = 0;
while (i < str1.length() && j < str2.length()) {
if (str1.charAt(i) == str2.charAt(j)) {
i++;
j++;
} else {
i++;
}
}
return j == str2.length();
}
// Solution 2 using String indexOf method
public static boolean isSubSequenceUsingIndexOf(String mainStr, String subStr) {
int i = 0;
int index = 0;
while(i<subStr.length()) {
char c = subStr.charAt(i);
if((index = mainStr.indexOf(c, index)) == -1) {
return false;
}
i++;
}
return true;
}
Giải pháp O (N), trong đó N là độ dài của chuỗi con.
bool subsequence(string s1, string s2){
int n1 = s1.length();
int n2 = s2.length();
if(n1 > n2){
return false;
}
int i = 0;
int j = 0;
while(i < n1 && j < n2){
if(s1[i] == s2[j]){
i++;
}
j++;
}
return i == n1;
}
- 1. Đếm số lần một chuỗi xuất hiện trong một chuỗi
- 2. Làm thế nào để tìm sự xuất hiện của một chuỗi trong chuỗi trong C + +?
- 3. Ruby - thay thế sự xuất hiện đầu tiên của một chuỗi với một chuỗi
- 4. Xuất hiện ký tự trong một đối tượng chuỗi C
- 5. Một lớp lót để đếm số lần xuất hiện của chuỗi trong một chuỗi [] trong Java?
- 6. Kết hợp chính xác một sự xuất hiện trong một chuỗi với cụm từ thông dụng
- 7. Đếm số lần xuất hiện của một chuỗi trong một chuỗi khác (Perl)
- 8. tsql "lần xuất hiện cuối cùng" bên trong một chuỗi
- 9. Đếm số lần xuất hiện ký tự trong một chuỗi
- 10. Làm thế nào tôi có thể tìm thấy sự xuất hiện đầu tiên của chuỗi con xuất hiện sau một chuỗi con khác trong python?
- 11. NSRegularExpressions mục tiêu-C, tìm sự xuất hiện đầu tiên của các số trong một chuỗi
- 12. Trong Notepad ++ làm cách nào để tìm thấy sự xuất hiện thứ n của một chuỗi
- 13. Làm cách nào để tìm sự xuất hiện thứ hai của một ký tự trong chuỗi?
- 14. Tìm sự xuất hiện đầu tiên của một chuỗi từ một vector <string>
- 15. Xóa tất cả các lần xuất hiện của chuỗi trong một chuỗi từ danh sách python
- 16. Tìm chỉ mục xuất hiện cuối cùng của chuỗi con trong một chuỗi
- 17. Thay thế một lần xuất hiện chuỗi Obj-c
- 18. Phụ thêm một biến chuỗi thành một chuỗi cố định trong Perl
- 19. chuỗi dài nhất xuất hiện n lần
- 20. C# - Cách đơn giản nhất để loại bỏ sự xuất hiện đầu tiên của chuỗi con từ một chuỗi khác
- 21. Regex để phù hợp với sự xuất hiện đầu tiên của một chuỗi
- 22. Công thức trong Excel để đếm số lần xuất hiện của các chuỗi trong chuỗi
- 23. Tìm lần xuất hiện thứ hai của chuỗi con trong chuỗi trong Java
- 24. Xóa lần xuất hiện cuối cùng trong chuỗi
- 25. xuất chuỗi multibyte trong C++
- 26. Làm thế nào để thay thế sự xuất hiện cuối cùng của chuỗi con trong ruby?
- 27. Làm thế nào để thay thế một chuỗi trong một chuỗi ngoại trừ lần xuất hiện đầu tiên
- 28. rreplace - Làm thế nào để thay thế sự xuất hiện cuối cùng của một biểu thức trong một chuỗi?
- 29. Bash: trích xuất một phần của chuỗi
- 30. Làm thế nào tôi có thể tìm thấy sự xuất hiện đầu tiên của một chuỗi con trong một chuỗi python?
Đây có phải là bài tập về nhà không? – Blender
không phải là một bài tập về nhà, điều đầu tiên tôi nghĩ là hậu tố trie nhưng không chắc chắn nếu nó là một lựa chọn tốt vì vậy muốn biết điều đầu tiên mà đến tâm trí của người khác là gì? –