代码拉取完成,页面将自动刷新
https://leetcode.cn/problems/decode-string/submissions/
class Solution {
public:
string getDigits(string &s, size_t &ptr) {
string ret;
while (isdigit(s[ptr])) {
ret.push_back(s[ptr++]);
}
return ret;
}
string getString(vector <string> &v) {
string ret;
for (const auto &s: v) {
ret += s;
}
return ret;
}
string decodeString(string s) {
vector <string> stk;
size_t ptr = 0;
while (ptr < s.size()) {
char cur = s[ptr];
if (isdigit(cur)) {
// 获取一个数字并进栈
string digits = getDigits(s, ptr);
stk.push_back(digits);
} else if (isalpha(cur) || cur == '[') {
// 获取一个字母并进栈
stk.push_back(string(1, s[ptr++]));
} else {
vector <string> sub;
while (stk.back() != "[") {
sub.push_back(stk.back());
stk.pop_back();
}
reverse(sub.begin(), sub.end());
// 左括号出栈
stk.pop_back();
// 此时栈顶为当前 sub 对应的字符串应该出现的次数
int repTime = stoi(stk.back());
stk.pop_back();
string t, o = getString(sub);
// 构造字符串
while (repTime--) t += o;
// 将构造好的字符串入栈
stk.push_back(t);
//下一个字符
++ptr;
}
}
return getString(stk);
}
};
https://leetcode.cn/problems/compress-string-lcci/submissions/
class Solution {
public:
string GetDigits(int count)
{
string tmp;
while(count)
{
tmp+=count%10+'0';
count/=10;
}
reverse(tmp.begin(), tmp.end());
return tmp;
}
string compressString(string S) {
string tmp; //存字符串
int count=0; //记录单个字母次数
char ch=S[0]; //记录当前字母
for(size_t i=0; i<=S.size(); ++i) //i==S.size(), 便于最后一次存
{
if(ch != S[i])
{
tmp+=ch;
tmp+=GetDigits(count); //得到数字字符
ch=S[i]; //更新
count=1;
}
else
{
++count;
}
}
if(S.size()<=tmp.size())
{
return S;
}
return tmp;
}
};
https://leetcode.cn/problems/multiply-strings/submissions/
class Solution {
public:
string addStrings(string &num1, string &num2)
{
int i = num1.size() - 1, j = num2.size() - 1, add = 0;
string ans;
while (i >= 0 || j >= 0 || add != 0)
{
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int result = x + y + add;
ans+=result % 10+'0';
add = result / 10;
i--;
j--;
}
reverse(ans.begin(), ans.end());
return ans;
}
string multiply(string num1, string num2) {
string ans = "0";
if (num1 == "0" || num2 == "0")
{
return ans;
}
int m = num1.size(), n = num2.size();
for (int i = n - 1; i >= 0; i--)
{
string curr;
int add = 0;
for (int j = n - 1; j > i; j--) //23*125 即十位2*125代表20*125.
{
curr+='0';
}
int y = num2[i] - '0';
for (int j = m - 1; j >= 0; j--)
{
int x = num1[j] - '0';
int product = x * y + add;
curr+=product % 10+'0';
add = product / 10;
}
while (add != 0)
{
curr+=add % 10+'0';
add /= 10;
}
reverse(curr.begin(), curr.end());
ans = addStrings(ans, curr); //得出每一位的结果相加(例如:23*125即375与2400结果相加)
}
return ans;
}
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。