
Truncate String
Cho một xâu kí tự chứa các chữ số từ 0
tới 9
Người ta áp dụng phép biển đổi xâu dựa trên các nguyên tắc sau:
- nếu chữ số ngoài cùng bên trái chia hết cho
3
, xóa nó khỏi xâu kí tự - nếu không thỏa mãn điều kiện trên, và nếu chữ số ngoài cùng bên tay phải chia hết cho
3
, xóa nó khỏi xâu kí tự - nếu không thỏa mãn 2 điều kiện trên, và nếu tổng chữ số ngoài cùng bên trái và ngoài cùng bên phải chia hết cho
3,
xóa cả hai chữ số trên khỏi xâu
Các phép toán trên được áp dụng vào xâu ban đầu cho tới khi xâu trở thành rỗng, hoặc ko đáp ứng cả 3
điều kiện trên
Cho một xâu kí tự, hãy tìm xâu kết quả cuối cùng khi áp dụng liên tục các phép toán trên
Ví dụ:
- Với
s = "312248"
, thì kết quảtruncateString(s) = "2"
.
Các bước thực hiện để ra kết quả trên như sau:
- Kí tự đầu tiên bên trái
3
chia hết cho3
và bị xóa. Xâu s trở thành"12248"
; - Cả
1
và8
đều không chia hết cho3
, nhưng tổng của chúng là9
thì chia hết cho3
, do đó cả1
và8
bị xóa khỏi xâu. Xâu s trở thành"224"
; - Cả
2
và4
đều không chia hết cho3
, nhưng tổng của chúng là6
thì chia hết cho3
, do đó cả2
và4
bị xóa khỏi xâu. Xâu s trở thành"2"
; - Xâu
"2"
không thỏa mãn điều kiện nào trong các điều kiện trên, do đó đây là xâu đáp án cuối cùng.
Đầu vào/đầu ra:
-
[Thời gian chạy] 3 seconds
-
[Đầu vào] string s
Điều kiện:1 ≤ s.length ≤ 15
. -
[Đầu ra] string.
Hướng dẫn bài tập.
Code mẫu:
Ngôn ngữ C++:
std::string truncateString(std::string s)
{
bool kt = true;
while (kt && s.length() > 0){
kt = false;
if ((s[0] - '0') % 3 == 0){
s.erase(0,1);
kt = true;
} else
if ((s[s.length() - 1] - '0') % 3 == 0){
s.erase(s.length()-1,1);
kt = true;
} else
if ((s[0]+s[s.length() - 1] - 96) % 3 == 0){
kt = true;
s.erase(s.length() - 1, 1);
s.erase(0, 1);
}
}
return s;
}
Post Comment