Palindrome dài nhất

Xem dạng PDF

Gửi bài giải


Điểm: 0,29 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Nguồn bài:
Nguyễn Hoành Tiến
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho xâu ~S~.

Tìm độ dài của xâu con (liên tiếp) đối xứng dài nhất.

Input

Dòng ~1~: Số nguyên dương ~N \leq 5 \times 10^4~.

Dòng ~2~: Xâu ký tự độ dài ~N~.

Output

1 dòng duy nhất gồm độ dài của xâu con đối xứng dài nhất.

Sample Input

5
abacd

Sample Output

3

Bình luận

Hãy đọc nội quy trước khi bình luận.



  • -2
    hoangquys  đã bình luận lúc 7, Tháng 1, 2026, 14:47

    Bài này O(N^2) vẫn AC nhé, solution khác là có thể dùng sliding window để làm bài này


  • 0
    dotuankiet18072008  đã bình luận lúc 1, Tháng 1, 2026, 0:52 sửa 2

    * Mình xin góp 1 ý tưởng cho những bài chưa nghĩ ra cách full ạ*

    • Ta sẽ chia bài toán thành 2 trường hợp đó là xâu đối xứng CHẴN và xâu đối xứng LẺ
    • Đông thời ta có một số nhận xét về xâu đối xứng như : nếu xâu đối xứng có độ dài L thì có thể không có xâu đối xứng L+2 tuy nhiên nếu ta có xâu đối xứng L + 2 thì chắc chắn việc ta có xâu đối xứng độ dài L
    • Ta xoáy sâu vào đó để đưa ra cách tìm kiếm nhị phân
    • * TH1 :xâu độ dài lẻ* ta xây dựng 1 vector để lưu các độ dài lẻ mà xâu S có thể xảy ra ví dụ như test đề bài abacd (5) thì mảng a[] = {1, 3, 5} rồi ta bắt đầu chặt nhị phân l = 0, r = a.size() - 1; và mid = (l+r)/2 sau đó kiểm tra ok(a[mid]) rồi cập nhật các giá trị để thực hiện chặt
    • ok[a[mid]] kiểm tra xem xâu s có xâu đối xứng nào có độ dài a[mid] ko
    • * TH2 xâu độ dài chẵn* ta là tương tự như TH1 nhưng mảng lưu trữu độ dài chẵn có thể xảy ra và làm tương tự như TH1 ạ
    • *Và mình có 1 số lưu ý cho các bạn về 1 số TH bị RTE : *
    • nên khai báo các biến như int n; string s.... ở ngoài hàm int main() ạ bởi nếu khai báo ở trong có thể bị RTE test cuối ạ
    • Cảm Ơn mọi người đã tham khảo ạ. Còn code mình xin phép ko gửi ạ bởi mình mong những bạn tham khảo ý tưởng của mình nếu có hứng thú thì có thể tự code mà không bị phụ thuộc vào bên ngoài ạ

  • -3
    vominhmanh10  đã bình luận lúc 9, Tháng 11, 2025, 3:43

    xâu đối xứng dùng manacher

    import sys
    input = sys.stdin.readline
    
    def palin():
        l = 0
        r = -1
        for i in range(n):
            if i <= r: odd[i] = min(r - i, odd[l + r - i])
            while i - odd[i] - 1 >= 0 and i + odd[i] + 1 < n and s[i - odd[i] - 1] == s[i + odd[i] + 1]:
                odd[i] += 1
            if i + odd[i] > r:
                l, r = i - odd[i], i + odd[i]
        l, r = 0, -1
        for i in range(n - 1):
            j = i + 1
            if j <= r: even[i] = min(r - i, even[l + r - j])
            while i - even[i] >= 0 and j + even[i] < n and s[i - even[i]] == s[j + even[i]]:
                even[i] += 1
            if i + even[i] > r:
                l, r = j - even[i], i + even[i]
        return max(max(odd) * 2 + 1, max(even) * 2)
    
    
    n = int(input())
    s = input().strip()
    odd = [0] * n
    even = [0] * n
    print(palin())
    

  • 2
    luuthanhdatbienhoak66  đã bình luận lúc 11, Tháng 9, 2025, 14:04

    =))

    https://ideone.com/wBFzlC


  • -3
    Hugcodega  đã bình luận lúc 17, Tháng 6, 2025, 13:44 chỉnh sửa
    • Hash + chặt nhị phân là ac

  • -42
    tandochuyentin2022  đã bình luận lúc 19, Tháng 2, 2025, 13:46

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 3
    HeroMinhSteve  đã bình luận lúc 27, Tháng 1, 2025, 15:28

    Gợi ý

    Cài MANACHER là ra


  • -7
    phanthien10r  đã bình luận lúc 3, Tháng 9, 2024, 17:27

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -1
    winky  đã bình luận lúc 2, Tháng 9, 2024, 8:11

    bài này có ver2 không ạ em code O(n^2) vẫn AC ;-;


    • 5
      dienthan901  đã bình luận lúc 17, Tháng 2, 2025, 14:52

      chắc test yếu, ô cứ đắp 10^6 chữ a là ok (")>


    • -1
      dienthan901  đã bình luận lúc 17, Tháng 2, 2025, 14:52

      chắc test yếu, ô cứ đắp 10^6 chữ a là ok (")>


  • -13
    DongDuc08  đã bình luận lúc 20, Tháng 8, 2024, 8:53

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -10
    Huy_inIT  đã bình luận lúc 24, Tháng 7, 2024, 3:07

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -3
    pndhpndh  đã bình luận lúc 16, Tháng 6, 2024, 3:43

    hihi


  • -7
    chunguyen2k8  đã bình luận lúc 14, Tháng 5, 2024, 12:18

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -5
      giga_hedgehog  đã bình luận lúc 15, Tháng 5, 2024, 0:49

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -5
    vantien1526  đã bình luận lúc 31, Tháng 8, 2023, 15:25

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • 1
      normankr07  đã bình luận lúc 3, Tháng 9, 2023, 4:23

      Tại hàm độ dài max không đơn điệu ý bạn, phải cnp các độ dài chẵn riêng và lẻ riêng Bài này bạn có thể làm bằng manacher, mình thấy dễ hơn, tài liệu thì ở đây: https://vnoi.info/wiki/algo/string/manacher.md


  • 1
    niahauma  đã bình luận lúc 15, Tháng 5, 2023, 11:01

    cho mình hỏi tại sao phải chặt nhị phân chẳn lẻ thế ạ


    • -8
      quocdev2009  đã bình luận lúc 14, Tháng 5, 2024, 7:29

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


      • -5
        Vinhzn08  đã bình luận lúc 5, Tháng 7, 2024, 17:10

        Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -6
      y  đã bình luận lúc 15, Tháng 5, 2023, 11:45

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -3
    YOASOBI  đã bình luận lúc 3, Tháng 2, 2023, 1:37

    Hash base 31 AC được nè :V


    • -4
      mt1234  đã bình luận lúc 18, Tháng 5, 2023, 5:50

      Code kiểu j v :>>


  • -7
    dasher  đã bình luận lúc 27, Tháng 1, 2023, 16:53

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -10
    tboros2  đã bình luận lúc 31, Tháng 12, 2022, 12:26

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • -2
      OrzSeaPosjtive  đã bình luận lúc 31, Tháng 12, 2022, 12:43

      Tại sao lại k nhỉ


      • -11
        nguyenhainam1012cg  đã bình luận lúc 18, Tháng 3, 2023, 15:42

        Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -28
    kh0i  đã bình luận lúc 20, Tháng 6, 2022, 6:19 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 61
    darkkcyan  đã bình luận lúc 3, Tháng 11, 2021, 21:31

    Cảm ơn bạn PPAP_1264589 đã đóng góp 3 test khá mạnh cho bộ test của bài này <3. Mình đã rejudge lại toàn bộ submission AC và lần này không chỉ có một vài mà lên đến khoảng 70 submissions đã mất AC :(.


    • -13
      tboros2  đã bình luận lúc 30, Tháng 12, 2022, 11:34

      Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 64
    I_love_Hoang_Yen  đã bình luận lúc 23, Tháng 8, 2021, 11:25

    Mình vừa thêm 1 test do bạn manhtranVN đóng góp, và có vài submission đã mất AC.