Loading Now

Question Correction

Một hệ thống hỏi đáp trực tuyến cần chuẩn hóa câu hỏi của người dùng

Một câu hỏi đã được chuẩn hóa cần tuân thủ các luật sau:

  • Luật chung: 
    Câu hỏi chỉ chứa kí tự chữ cái (a-zA-Z), chữ số (0-9), dấu phẩy (,), dấu cách (' '), dấu hỏi (?). Các kí tự khác đều được thay thế bằng dấu cách
  • Luật dấu cách:
    Không có dấu cách ở đầu hay ở cuối câu. Giữa các từ chỉ có 1 dấu cách duy nhất. Sau mỗi dấu cách là 1 chữ cái hoặc chữ số?
  • Luật dấu phẩy:
    Trước dấu phẩy luôn là 1 chữ cái hoặc chữ số. Sau dấu phẩy luôn là một dấu cách
    Trường hợp đứng trước dấu phẩy là dấu cách, hãy xóa dấu cách này đi.
  • Luật chữ hoa/chữ thường:
    Chữ cái bắt đầu câu luôn được viết hoa. Các chữ cái khác đều viết thường
  • Luật dấu hỏi:
    Luôn có 1 dấu ? kết thúc câu. Trước dấu ? luôn là kí tự chữ cái hoặc chữ số
    Trường hợp có các dấu ? xuất hiện khi chưa kết thúc câu, hãy thay thế nó bằng dấu cách
    Trường hợp trước dấu cách là dấu phẩy và dấu cách, hãy xóa dấu cách và dấu phẩy

Ví dụ:

  • Với đầu vào s="this is not a relevant question , is it???", thì kết quả questionCorrection(s) = "This is not a relevant question, is it?"
  • Với đầu vào s="who are you,,???", thì kết quả questionCorrection(s) = "Who are you?"

Đầu vào/đầu ra:

  • [Thời gian chạy] 0.5 giây
  • [Đầu vào] string s
    Xâu kí tự chứa ít nhất 1 kí tự chữ cái (a-zA-Z)
    1 <= x.length <= 1000
  • [Đầu ra] string
    Xâu kí tự được chuẩn hóa theo các luật trên.

Hướng dẫn bài tập.

Code mẫu:

Ngôn ngữ JavaScript:

function questionCorrection(s){
    s = s.toLowerCase();
    s = s.replace(/[^A-Za-z0-9,]/g, ' ');
    s = s.replace(/^[^A-Za-z0-9]+/, '');
    s = s.replace(/[^A-Za-z0-9]+$/, '');
    s = s.replace(/(?<=[A-Za-z0-9])([^A-Za-z0-9]+)(?=[A-Za-z0-9])/g, m => {
        if (/^[\s]+$/.test(m)) return ' ';
        return ', ';
    });
    s = s[0].toUpperCase() + s.slice(1) + '?';
    return s;
}

Post Comment

Contact