Hỏi về so sánh với len()

def longest_consec(strarr, k):
    result = ""
    if k > 0 and len(strarr) >= k:
        for index in range(len(strarr) - k + 1):
            s = ''.join(strarr[index:index+k])
            if len(s) > len(result):
                result = s
    return result

Cho mình hỏi là câu lệnh if so sánh len(s) với len(result) có tác dụng gì vậy mà lại trả về kết quả đúng.

Câu hỏi nhưng không có chủ đề trọng tâm, không ai rõ bạn muốn làm cái gì với hàm này cả.

Đề bài là: tạo hàm longest_consec(), với đối số strarr là một list và một số nguyên k.
EX: n = [“a”, “bb”, “ccc”, ddddd", “vvvv”, “ghgh”, “ukkkk”]; k = 3.
Sau đó trả về k chuỗi ký tự liên tiếp dài nhất trong list (trả về chuỗi đầu tiên dài nhất).
Như trong ví dụ trên thì kết quả sẽ là: dddddvvvvghgh. Nghĩa là trả về 3 chuỗi liên tiếp dài nhất đầu tiên.

À rồi, code của bạn nó duyệt theo từng cụm thế này:
image
Cho nên số lần duyệt mới là len(strarr) - k + 1, index là index của mỗi cụm (0 đến 4 trong trường hợp này), strarr[index:index+k] là để cắt ‘cụm đang xét’ ra.
Cứ mỗi cụm thì nó ghép lại theo thứ tự thành chuỗi và lưu trữ vào biến result, và trong quá trình duyệt nó sẽ thay result bằng chuỗi s mới nếu s dài hơn result cũ (len(s) > len(result)), ý tưởng của code này giống với thuật toán tìm số lớn nhất điển hình.

4 Likes

Bài này cộng len trước rồi giữ index về join :smiley: cho nhanh.

1 Like

Cảm ơn bạn nhiều. Cho mình hỏi câu nữa, vậy quá trình lưu vào biến result là ở giai đoạn nào vậy bạn. Mình không thấy câu lệnh nào thể hiện cho điều đó hết. Nó tự lưu hay sao bạn.

Là đây chứ đâu, khi nào s dài hơn result thì lưu, trước khi vào vòng lặp, result là mảng rỗng tức len = 0:

if len(s) > len(result):
   result = s
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?