Computer >> Máy Tính >  >> Lập trình >> Javascript

Tách một chuỗi thành các phần tối đa trong JavaScript

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một chuỗi, str, làm đối số đầu tiên và duy nhất.

Mục đích của hàm của chúng ta là phân vùng chuỗi này thành nhiều phần nhất có thể để mỗi chữ cái xuất hiện ở nhiều nhất một phần và trả về một mảng các số nguyên đại diện cho kích thước của các phần này.

Ví dụ:nếu đầu vào của hàm là

Đầu vào

const str = "ababcbacadefegdehijhklij";

Đầu ra

const output = [9, 7, 8];

Giải thích đầu ra

Phân vùng là "ababcbaca", "defegde", "hijhklij". Đây là một phân vùng sao cho mỗi chữ cái xuất hiện trong nhiều nhất một phần. Một phân vùng như "ababcbacadefegde", "hijhklij" là không chính xác, vì nó chia chuỗi str thành các phần nhỏ hơn.

Ví dụ

Sau đây là mã -

const str = "ababcbacadefegdehijhklij";
const splitStrings = (str = '') => {
   const res = []
   const map = {}
   for (let i = 0; i < str.length; i++) {
      map[str[i]] = i
   }
   let start = 0
   while (start <= str.length - 1) {
      let end = map[str[start]]
      for (let i = start + 1; i < end; i++) {
         const currentEnd = map[str[i]]
         if (currentEnd > end) {
            end = currentEnd
         }
      }
      res.push(end - start + 1)
      start = end + 1
   }
   return res
};
console.log(splitStrings(str));

Đầu ra

[ 9, 7, 8 ]