Cách tìm ký tự lặp lại trong chuỗi trong javascript

Nếu bạn kiểm tra số lần xuất hiện của 'o' trong chuỗi 'school', kết quả là 2

ví dụ 1. Kiểm tra sự xuất hiện của một ký tự bằng vòng lặp

// program to check the number of occurrence of a character

function countString(str, letter) {
    let count = 0;

    // looping through the items
    for (let i = 0; i < str.length; i++) {

        // check if the character is at that position
        if (str.charAt(i) == letter) {
            count += 1;
        }
    }
    return count;
}

// take input from the user
const string = prompt('Enter a string: ');
const letterToCheck = prompt('Enter a letter to check: ');

//passing parameters and calling the function
const result = countString(string, letterToCheck);

// displaying the result
console.log(result);

đầu ra

Enter a string: school
Enter a  letter to check: o
2

Trong ví dụ trên, người dùng được nhắc nhập một chuỗi và ký tự để kiểm tra

  • Ban đầu, giá trị của biến đếm là 0
  • Vòng lặp for được sử dụng để lặp qua các chuỗi
  • Phương thức charAt() trả về một ký tự tại một chỉ mục đã chỉ định
  • Trong mỗi lần lặp lại, nếu ký tự tại chỉ mục đó khớp với ký tự bắt buộc để khớp, thì biến đếm được tăng thêm 1

ví dụ 2. Kiểm tra sự xuất hiện của một ký tự bằng Regex

// program to check the occurrence of a character

function countString(str, letter) {

    // creating regex 
    const re = new RegExp(letter, 'g');

    // matching the pattern
    const count = str.match(re).length;

    return count;
}

// take input from the user
const string = prompt('Enter a string: ');
const letterToCheck = prompt('Enter a letter to check: ');

//passing parameters and calling the function
const result = countString(string, letterToCheck);

// displaying the result
console.log(result);

đầu ra

Enter a string: school
Enter a  letter to check: o
2

Trong ví dụ trên, một biểu thức chính quy (regex) được sử dụng để tìm sự xuất hiện của một chuỗi

  • const re = new RegExp(letter, 'g'); tạo một biểu thức chính quy
  • Phương thức match() trả về một mảng chứa tất cả các kết quả khớp. Ở đây, str.match(re); đưa ra ["o", "o"]
  • Thuộc tính length cung cấp độ dài của một phần tử mảng
Kiểm tra xem một chuỗi có bao gồm một chuỗi ký tự lặp lại không

phiên bản JavaScript

const consistsRepeatedSubstring = (str) => `${str}${str}`.indexOf(str, 1) !== str.length;

Phiên bản TypeScript

const consistsRepeatedSubstring = (str: string): boolean => `${str}${str}`.indexOf(str, 1) !== str.length;

ví dụ

consistsRepeatedSubstring('aa'); // true
consistsRepeatedSubstring('aaa'); // true
consistsRepeatedSubstring('ababab'); // true
consistsRepeatedSubstring('abc'); // false

Để tìm ký tự trùng lặp từ chuỗi, chúng ta đếm số lần xuất hiện của từng ký tự trong chuỗi. Nếu số lượng lớn hơn 1, điều đó có nghĩa là một ký tự có một mục nhập trùng lặp trong chuỗi. Trong ví dụ trên, các ký tự được tô màu xanh lục là các ký tự trùng lặp

Trong bài viết này, chúng ta sẽ tìm hiểu cách kiểm tra xem một chuỗi có bao gồm một chuỗi ký tự lặp lại hay không chỉ bằng cách sử dụng một dòng mã trong JavaScript. Đây là đoạn mã JavaScript một dòng sử dụng một trong những tính năng phổ biến nhất của ES6 => Arrow Function

Hãy xác định chức năng ngắn này

const consistsRepeatedSubstring = str => `${str}${str}`.indexOf(str, 1) !== str.length;

Một câu hỏi phỏng vấn lập trình rất phổ biến là đưa ra một chuỗi, bạn cần tìm ra các ký tự trùng lặp trong chuỗi.

Một chuỗi chỉ là một mảng các ký tự nên chắc chắn chúng ta sẽ nghĩ đến việc giải bài toán bằng các phép toán trên mảng. Một vòng lặp for sẽ lặp qua danh sách các ký tự và chúng ta sẽ so sánh từng ký tự để xem nó có trùng lặp với các ký tự còn lại không. Do đó, chúng ta sẽ cần thực hiện một vòng lặp khác trên các ký tự còn lại… “Nhưng khoan đã”, bạn có thể nói, “Điều này chậm và không lập trình viên thực thụ nào sẽ làm điều này. ” Bạn không hài lòng với giải pháp O(n²) bởi vì bạn là một lập trình viên thực thụ. Hãy sử dụng Hashmap để lưu trữ kết quả. Nó sẽ giống như thế này trong ES6

________số 8_______

Đây chỉ là một ví dụ về giao diện của nó khi sử dụng hàm băm. Có nhiều biến thể của phương pháp này nhưng miễn là bạn sử dụng hàm băm sẽ làm được

Ở đây, hash là một đối tượng Map và nó sẽ lưu trữ từng ký tự có sẵn trong chuỗi dưới dạng khóa. Giá trị ban đầu của bất kỳ khóa nào trong bản đồ là undefined. Nếu ký tự được lặp lại, chúng tôi đánh dấu là false nếu không lặp lại, chúng tôi sẽ đánh dấu là true. Khi chúng tôi có cấu trúc dữ liệu này, rất dễ dàng tìm ra ký tự nào được lặp lại. Bây giờ phải mất O(n) để giải quyết vấn đề

Tất cả đều tốt. Nhưng nếu bạn không muốn sử dụng Hashmap thì sao? . ”, bạn có thể tranh luận. OK, một lần nữa, là một lập trình viên thực thụ, chúng tôi muốn viết càng ít mã càng tốt để có thời gian làm những thứ thú vị hơn. Chúng ta có lựa chọn nào khác không?

Hóa ra chúng ta có một lựa chọn khác. Biểu thức chính quy javascript ở đây để giải cứu. Đây là một giải pháp khác sử dụng biểu thức chính quy

function howManyRepeated(str){
const result = [];
const strArr = str.toLowerCase().split("").sort().join("").match(/(.)\1+/g);

if (strArr != null) {
strArr.forEach((elem) => {
result.push(elem[0]);
});
}
return result;
}
console.log(...howManyRepeated(str));

Cái quái gì thế? . Chỉ cần một dòng mã là đủ để nhận các ký tự lặp lại. Tuyệt vời, phải không?

Nó đi như thế này. Đầu tiên chúng ta biến chuỗi thành một mảng ký tự, sau đó sắp xếp mảng và đặt chúng lại với nhau để tạo thành một chuỗi mới. Chuỗi này được sắp xếp để chúng ta có thể sử dụng biểu thức chính quy để khớp với các ký tự lặp lại. Một ký tự lặp lại được khớp bởi /(.)\1+/ , về cơ bản có nghĩa là lấy nhóm bắt giữ và kiểm tra xem văn bản sau có giống với văn bản được khớp gần đây nhất bởi nhóm bắt đầu tiên không. strArr lưu trữ các nhóm ký tự phù hợp để mỗi phần tử của nó chứa nhiều hơn 1 ký tự. Đó là một giải pháp rất gọn gàng mà tôi tìm thấy trên Stackoverflow. com. Tôi cảm thấy nó là tốt nhất để chia sẻ với bạn