
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