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

Chuỗi có phải là sự kết hợp của các chuỗi con lặp lại trong JavaScript không

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một chuỗi ký tự làm đối số duy nhất. Hàm của chúng ta cần kiểm tra xem chuỗi str có thể được tạo bằng cách lấy một chuỗi con của nó và nối nhiều bản sao của chuỗi con lại với nhau hay không.

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

const str = 'thisthisthisthis';

Sau đó, kết quả đầu ra phải là -

const output = true;

Giải thích đầu ra:

Bởi vì chuỗi được tạo bằng cách nối chuỗi ‘this’ lặp đi lặp lại.

Ví dụ

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

const str = 'thisthisthisthis';
const repeatedSubstring = (str = '') => {
   const {length} = str;
   const checkSubString = ss => {
      const m = ss.length;
      for (let i = 0; i < length; i += m)
         for (let j = 0; j < m; j++)
            if (str[i+j] !== ss[j])
               return false;
      return true;
   };
   let factor = 2, len;
   while (length/factor >= 1){
      while (length % factor) factor++;
      len = length/factor;
      if (checkSubString(str.substring(0,len))){
         return true;
      };
      factor++;
   };
   return false;
};
console.log(repeatedSubstring(str));

Giải thích mã:

Đầu tiên, chúng tôi thiết lập chức năng kiểm tra mẫu chuỗi con.

Sau đó, chúng tôi lặp lại qua tất cả các yếu tố có thể chia đều chuỗi str, để xác định xem đã tìm thấy mẫu lặp khả thi chưa.

Đầu ra

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

true