Làm cách nào để loại bỏ các bản sao trong chuỗi trong Python bằng đệ quy?
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách xóa các ký tự trùng lặp khỏi một chuỗi đã cho bằng chương trình Java. Chúng ta sẽ học nó bằng phương pháp đệ quy Hiểu vấn đềTrong bài toán này, chúng ta sẽ là một Chuỗi chứa các ký tự trùng nhau liên tiếp Ví dụ. aabbbcddd chúng ta phải trả về kết quả là abcd. Chuỗi là tập hợp các ký tự nên trong bài toán này chúng ta sẽ kiểm tra tất cả các ký tự trong chuỗi đã cho và sau đó chúng ta sẽ loại bỏ tất cả các ký tự trùng lặp liên tiếp rồi trả về chuỗi Đôi khi đệ quy có thể là một chút khó khăn. Đệ quy là một phương pháp giải một bài toán cụ thể trong đó chúng ta tính toán nghiệm chỉ bằng cách sử dụng một trường hợp nhỏ hơn của cùng một bài toán. Trong lập trình, đệ quy sử dụng một hàm gọi chính nó một cách trực tiếp hoặc gián tiếp và hàm tương ứng đó được gọi là hàm đệ quy Chương trình tìm hiểu Nhân đôi liên tiếpimport java.util.Scanner; class duplicateChar { public static String removeCosecutiveDuplicates(String s) { if(s.length()<=1) { return s; } if(s.charAt(0) == s.charAt(1)) { return removeCosecutiveDuplicates(s.substring(1)); } else { String small = removeCosecutiveDuplicates(s.substring(1)); return s.charAt(0) + small; } } public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = s.nextLine(); String result = removeCosecutiveDuplicates(str); s.close(); System.out.println("Your new String is " + result); } } Có ba phần trong một hàm đệ quy
Trường hợp cơ bản của hàm này là nó sẽ kết thúc và trả về chuỗi khi độ dài của chuỗi nhỏ hơn hoặc bằng 1. Độ dài của chuỗi được tính bằng cách sử dụng length() Trong điều kiện đệ quy, chúng ta gọi chính hàm đó và trong khi chuỗi thực thi tăng giá trị của nó lên 1 và mỗi lần nó chuyển sang ký tự tiếp theo của chuỗi. Do đó, sau mỗi lần gọi phương thức được thực thi, chúng ta sẽ nhận được kết quả là chuỗi của mình sau khi loại bỏ các ký tự liên tiếp trùng lặp được trả về kết quả là chính. Cuối cùng, chúng ta sẽ in giá trị này khi gọi hàm print Chạydef removeDuplicates(s, ch): if s is None or len(s) <= 1: return s i, j = 0, 0 while i < len(s): if i + 1 < len(s) and s[i] == s[i + 1]: j = i while j + 1 < len(s) and s[j] == s[j + 1]: j += 1 if i > 0: lastChar = s[i - 1] else: lastChar = ch remStr = removeDuplicates(s[j + 1:], lastChar) s = s[0: i] while len(remStr) > 0 and len(s) > 0 and remStr[0] == s[len(s) - 1]: while len(remStr) > 0 and remStr[0] != ch and remStr[0] == s[len(s) - 1]: remStr = remStr[1: len(remStr)] s = s[0: len(s) - 1] s = s + remStr i = j else: i += 1 return s str1 = "mississipie" print(removeDuplicates(str1, ' ')) Đưa ra một chuỗi, loại bỏ đệ quy các ký tự trùng lặp liền kề khỏi chuỗi. Chuỗi đầu ra không được có bất kỳ bản sao liền kề nào. Xem các ví dụ sau ví dụ.
Khuyến khích. Vui lòng giải quyết nó trên “PRACTICE” trước khi chuyển sang giải pháp. Có thể thực hiện theo cách tiếp cận sau để loại bỏ các bản sao trong thời gian O(N).
Hình ảnh dưới đây là một cách khô khan của phương pháp trên Dưới đây là việc thực hiện các phương pháp trên con trăn
________số 8_______
đầu ra. gksfor ay g a qrq acac a Thời gian phức tạp. Độ phức tạp thời gian của giải pháp có thể được viết là T(n) = T(n-k) + O(k) trong đó n là độ dài của chuỗi đầu vào và k là số ký tự đầu tiên giống nhau. Giải pháp của sự truy hồi là O(n) |