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

Trường hợp có vấn đề về từ diễn đạt trong JavaScript

Đôi khi người ta lặp lại các chữ cái để biểu thị cảm giác thêm, chẳng hạn như "xin chào" -> "heeellooo", "chào" -> "hiiii". Trong các chuỗi như "heeellooo" này, chúng ta có các nhóm chữ cái liền kề giống nhau:"h", "eee", "ll", "ooo".

Đối với một số chuỗi S đã cho, một từ truy vấn có thể co giãn nếu nó có thể được tạo ra bằng S bằng bất kỳ số ứng dụng nào của thao tác mở rộng sau:chọn một nhóm bao gồm các ký tự c và thêm một số ký tự c vào nhóm để kích thước của nhóm là 3 trở lên.

Ví dụ:bắt đầu bằng "xin chào", chúng tôi có thể thực hiện một phần mở rộng trên nhóm "o" để có "hellooo", nhưng chúng tôi không thể nhận "helloo" vì nhóm "oo" có kích thước nhỏ hơn 3. Ngoài ra, chúng tôi có thể làm một phần mở rộng khác như "ll" -> "lllll" để lấy "helllllooo". Nếu S ="helllllooo", thì từ truy vấn "hello" sẽ bị giãn vì hai thao tác mở rộng này:query ="hello" -> "hellooo" -> "helllllooo" =S.

Đưa ra danh sách các từ truy vấn, chúng tôi bắt buộc phải trả về số lượng từ có thể co giãn.

Ví dụ -

Nếu chuỗi đầu vào là -

const str = 'heeellooo';

Và danh sách các từ là -

const words = ["hello", "hi", "helo"];

Và kết quả đầu ra phải -

const output = 1

Ví dụ

Mã cho điều này sẽ là -

const str = 'heeellooo';
const words = ["hello", "hi", "helo"];
const extraWords = (str, words) => {
   let count = 0;
   for (let w of words) {
      let i = 0;
      let j = 0;
      for (; i < str.length && j < w.length && w[j] === str[i];) {
         let lenS = 1;
         let lenW = 1;
         for (; i+lenS < str.length && str[i+lenS] === str[i]; lenS++);
         for (; j+lenW < w.length && w[j+lenW] === w[j]; lenW++);
         if (lenS < lenW || lenS > lenW && lenS < 3) break;
         i += lenS;
         j += lenW;
      }
      if (i === str.length && j === w.length) {
         count++;
      }
   }
   return count;
}
console.log(extraWords(str, words));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

1