对于字符串的话,我们已经比较熟悉了,来通过几个有意思的题加深理解一下吧。



class Solution {
public:
string addBinary(string a, string b) {
string ret;
int n=a.size()-1,m=b.size()-1;
int t=0;
while(n>=0||m>=0||t){
if(n>=0) t+=a[n--]-'0';
if(m>=0) t+=b[m--]-'0';
ret+=(t%2)+'0';
t/=2;
}
reverse(ret.begin(),ret.end());
return ret;
}
};



class Solution {
public:
string multiply(string num1, string num2) {
int n=num1.size(),m=num2.size();
reverse(num1.begin(),num1.end());
reverse(num2.begin(),num2.end());
vector<int> ret(m+n-1);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
ret[i+j]+=(num1[i]-'0')*(num2[j]-'0');
}
}
string result;
int t=0,i=0;
while(i<m+n-1||t!=0){
if(i<m+n-1){
t+=ret[i++];
}
result+=(t%10)+'0';
t/=10;
}
while(result.size()>1&&result.back()=='0') result.pop_back();
reverse(result.begin(),result.end());
return result;
}
};



class Solution {
public:
string removeDuplicates(string s) {
string ret;
for(auto e: s){
if(ret.size()&&e==ret.back()) ret.pop_back();
else ret+=e;
}
return ret;
}
};



class Solution {
public:
bool backspaceCompare(string s, string t) {
return change(s)==change(t);
}
string change(string& s){
string ret;
for(auto e : s){
if(e!='#') ret+=e;
else if(ret.size()) ret.pop_back();
}
return ret;
}
};