0
0
Lập trình
Thaycacac
Thaycacac thaycacac

Tìm Từ Dài Nhất Trong Câu: Giải Pháp JavaScript Hiệu Quả

Đăng vào 7 tháng trước

• 4 phút đọc

Giới thiệu

Trong lập trình JavaScript, một trong những bài toán thú vị mà bạn có thể gặp phải là tìm từ dài nhất trong một câu. Bài viết này sẽ giúp bạn hiểu cách xây dựng hàm LongestWord(sen) để thực hiện nhiệm vụ này. Chúng ta sẽ đi qua từng bước từ lý thuyết đến thực hành với nhiều ví dụ và mẹo tối ưu hóa.

Đề bài

Chức năng LongestWord(sen) nhận tham số sen và trả về từ dài nhất trong chuỗi. Nếu có hai hoặc nhiều từ có cùng chiều dài, hãy trả về từ đầu tiên trong chuỗi đó. Bỏ qua dấu câu và giả sử rằng sen sẽ không rỗng. Các từ có thể bao gồm cả số, ví dụ: "Hello world123 567".

Giải pháp

Dưới đây là mã nguồn cho hàm LongestWord:

javascript Copy
const longestWordInArray = (sen) => {
  if (sen.length === 0) {
    return sen;
  }
  let idx = 0;
  let len = 0;
  const wordsArray = sen.replace(/[^\w ]/g, "").split(" ");
  for (let i = 0; i < wordsArray.length; i++) {
    if (wordsArray[i].length > len) {
      len = wordsArray[i].length;
      idx = i;
    }
  }

  return wordsArray[idx];
};

console.log(longestWordInArray("fun&!! time chimpanze"));

Phân tích giải pháp

  • Bước 1: Tạo hàm longestWordInArray với một tham số là sen, đây là chuỗi đầu vào.
  • Bước 2: Kiểm tra nếu sen rỗng. Nếu có, hàm sẽ trả về giá trị rỗng để tránh lỗi.
  • Bước 3: Khởi tạo hai biến: idx để lưu vị trí của từ dài nhất và len để lưu chiều dài của từ dài nhất.
javascript Copy
const wordsArray = sen.replace(/[^\w ]/g, "").split(" ");
  • Giải thích: Dòng lệnh trên sẽ thực hiện hai việc:
    • sen.replace(/[^\w ]/g, ""): loại bỏ dấu câu và ký tự đặc biệt, chỉ giữ lại chữ cái, số và khoảng trắng. Ví dụ: "fun&!! time" trở thành "fun time".
    • .split(" "): tách câu thành mảng từ (phân tách tại khoảng trắng). Ví dụ: "fun time chimpanze" trở thành ["fun", "time", "chimpanze"].

Giờ đây, chúng ta đã có một mảng từ.

javascript Copy
for (let i = 0; i < wordsArray.length; i++) {
  if (wordsArray[i].length > len) {
    len = wordsArray[i].length;
    idx = i;
  }
}
  • Giải thích: Vòng lặp này sẽ duyệt qua từng từ trong mảng:
    • wordsArray[i]: từ hiện tại.
    • wordsArray[i].length: số ký tự trong từ đó.

Nếu chiều dài của từ hiện tại lớn hơn giá trị hiện tại của len, thì:

  • Cập nhật len với chiều dài mới.
  • Cập nhật idx với vị trí của từ đó. Sau khi vòng lặp kết thúc, idx sẽ trỏ đến từ dài nhất.

Cuối cùng, chúng ta sẽ trả về từ tại vị trí idx, tức là từ dài nhất mà chúng ta đã tìm thấy.

Các thực hành tốt nhất

  • Xử lý ký tự đặc biệt: Đảm bảo rằng bạn đã loại bỏ hết các ký tự không cần thiết để không làm sai lệch kết quả.
  • Kiểm tra trường hợp rỗng: Luôn kiểm tra xem chuỗi đầu vào có rỗng hay không để tránh lỗi khi thực thi.
  • Tối ưu hóa hiệu suất: Nếu câu có quá nhiều từ, hãy cân nhắc sử dụng các cấu trúc dữ liệu khác để tối ưu hóa hiệu suất.

Những cạm bẫy thường gặp

  • Bỏ qua dấu câu: Nhiều lập trình viên có thể quên loại bỏ dấu câu, dẫn đến việc từ dài nhất không chính xác.
  • Tính toán sai chiều dài: Đảm bảo rằng bạn sử dụng đúng cách để tính chiều dài của từ mà không bị ảnh hưởng bởi các ký tự đặc biệt.

Mẹo hiệu suất

  • Sử dụng biểu thức chính quy: Việc sử dụng biểu thức chính quy để loại bỏ ký tự không cần thiết nhanh hơn là lặp qua từng ký tự.
  • Giảm số lần duyệt: Nếu có thể, hãy giảm số lần duyệt qua mảng bằng cách sử dụng các thuật toán tìm kiếm nâng cao.

Kết luận

Tóm lại, hàm trên loại bỏ dấu câu, tách câu thành các từ, kiểm tra từ nào là dài nhất và trả về từ đó. Độ phức tạp về thời gian và không gian của giải pháp là O(n), điều này có nghĩa là hàm này sẽ chạy hiệu quả ngay cả với những chuỗi dài. Hãy thử nghiệm với các câu khác nhau và chia sẻ giải pháp của bạn trong phần bình luận bên dưới!

Câu hỏi thường gặp (FAQ)

  1. Hàm này có thể xử lý chuỗi rỗng không?

    • Có, hàm sẽ trả về một chuỗi rỗng nếu đầu vào là chuỗi rỗng.
  2. Có thể tìm từ dài nhất trong một mảng không?

    • Có, bạn có thể sửa đổi hàm để nhận một mảng các chuỗi và áp dụng thuật toán tương tự.
  3. Hàm có thể xử lý số không?

    • Đúng vậy, hàm sẽ coi số là một phần của từ và tính chiều dài như bình thường.
Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào