
[STL_C++Stack] encodeString
Đề bài
Cho một sâu s
chỉ gồm các ký tự viết thường, hãy viết hàm trả về chuỗi mã hóa của sâu này. Xem ví dụ để hiểu rõ hơn quá trình mã hóa
Ví dụ
- Với
s = "aaabbaaac"
thìencodeString(s) = "a3b2a3c1".
- Với
s = "ab"
thìencodeString(s) = "a1b1".
- Với
s = "aaddacc"
thìencodeString(s) = "a2d2a1c2".
Hướng dẫn:
Tạo một stack để lưu lần lượt các ký tự trong chuỗi s, nếu st.top() != s[i]
thì kết quả sẽ thêm st.top()
và số lượng phần tử trong st vào chuỗi kết quả.
Code mẫu:
std::string encodeString(std::string s)
{
s = s + '@';
stack<char> st;
string str = "";
for (int i = 0; i < s.length(); i++){
if (st.empty() || st.top() == s[i]){
st.push(s[i]);
} else {
int count = 0;
str = str + st.top();
while(!st.empty()){
count++;
st.pop();
}
str = str + to_string(count);
st.push(s[i]);
count = 1;
}
}
return str;
}
Post Comment