Nhờ giúp đỡ bài tập tìm số ký tự tối thiểu cần chèn vào chuỗi để tạo ra dãy a -> z

Em có đề bài tìm Số ký tự tối thiểu để chèn bất cứ nơi nào trong chuỗi để tạo ra dãy a->z
Em đã code nhiều lần nhưng chạy không đúng và rất phức tạp
Mong các bác giúp đỡ, gợi ý giúp em với ạ

A string of lowercase letters is called alphabetical if deleting zero or more of its letters can result in the alphabet string “abcdefghijklmnopqrstuvwxyz”. Given a string s, determine the minimum number of letters to insert anywhere in the string to make it alphabetical.

Input

The input file contains several test cases, each of them consists of a single line containing a string s
(1 ≤ |s| ≤ 50).
It is guaranteed that s consists of lowercase ASCII letters ‘a’ to ‘z’ only.

Output

For each test case, print, on a single line, a single integer indicating the minimum number of letters
that must be inserted in order to make the string s alphabetical.

Sample Input

xyzabcdefghijklmnopqrstuvw
aiemckgobjfndlhp

Sample Output

3
20

Link: https://icpcarchive.ecs.baylor.edu/external/79/7953.pdf

Em cảm ơn các bác

Em up code của mình nên, mọi người cùng thảo luận nhé!

Mình cho bạn thuật toán này xem có khó code không nhé:

1. Trong dãy ban đầu, mỗi lần dãy không tăng (Input[i] ≤ Input[i-1]) thì ngắt ra thành dãy mới, thu được n dãy tăng.
2. Trong n dãy tăng này, gọi x là số phần tử lớn nhất của một dãy tăng.
3. return 26 - x;

Nếu bạn không nghĩ được tại sao mình có thuật toán này thì có thể hỏi, mình hoặc người khác sẽ trả lời.

3 Likes

cái test case 2 làm sao nó ra 20 nhỉ, ai giải thích với ?

Bài này là tìm dãy tăng dài nhất rồi lấy 26 - chiều dài của dãy tăng đó :v OK thanks Trần Hoàn

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?