1.字符串相乘
. - 力扣(LeetCode)
class Solution {
public:
string multiply(string num1, string num2) {
string str;
int flag=0;
int num=0;
int begin1=0;
int begin=0;
if(num1[0]=='0'||num2[0]=='0')
{ str='0';
return str;}
for(int i=num1.size()-1;i>=0;i--)
{
for(int j=num2.size()-1;j>=0;j--)
{
if(i==num1.size()-1)
{
num=(num1[i]-'0')*(num2[j]-'0')+flag;
if(num>9)
flag=num/10;
else
flag=0;
str.push_back(num%10+'0');
if(j==0&&flag!=0)
{
str.push_back(flag+'0');
flag=0;
}
}
else
{
num=(num1[i]-'0')*(num2[j]-'0')+flag;
if(begin<=str.size()-1)
num=num+str[begin]-'0';
if(num>9)
flag=num/10;
else
flag=0;
if(begin<=str.size()-1)
str[begin]=num%10+'0';
else
str.push_back(num%10+'0');
if(j==0&&flag!=0)
{
str.push_back(flag+'0');
flag=0;
}
begin++;
}
}
begin1++;
begin=begin1;
}
reverse(str.begin(),str.end());
return str;
}
};
2.反转字符串中的单词
. - 力扣(LeetCode)
class Solution {
public:
string reverseWords(string s) {
int i=0;
int flag=0;
string::iterator j= s.begin();
while(*j==' ')
j++;
for(;i<=s.size();i++)
{
if(s[i]==' '||i==s.size())
{
reverse(j,j+flag); //左闭右开
j=j+flag+1;
//i++;
flag=0;
}
else
flag++;
}
return s;
}
};
3.字符串中第一个只出现一次的字符
. - 力扣(LeetCode)
class Solution {
public:
int firstUniqChar(string s) {
int arr[26]={0};
for(auto ch :s)
{
arr[ch-'a']++;
}
for(int i=0;i<s.size();i++)
{
if(arr[s[i]-'a']==1)
{
return i;
}
}
return -1;
}
};
4.把字符串转为整形
. - 力扣(LeetCode)
class Solution {
public:
int myAtoi(string str) {
int i = 0;
int flag = 1;
int flag2=0;
long long num = 0; //pow(2,31)很大,必须用long long类型存储
while(str[i]==' ')
i++; //跳过前面的‘ ’
for (; i < str.size(); i++)
{
if (str[i] != ' ')
{
if (str[i] == '-'&&(str[i+1] >= '0' && str[i+1] <= '9')) //必须保证‘+’ 后必须是数字才能确定符号
{
if(flag2) //flag2的作用是防止“1200-12”这种类型多次读取
break;
flag = 0;
flag2=1;
}
else if (str[i] == '+'&&(str[i+1] >= '0' && str[i+1] <= '9'))//同理
{
if(flag2)
break;
flag = 1;
flag2=1;
}
else if((str[i] < '0' || str[i] > '9')) //如果为字符则直接终止循环
break;
if (str[i] >= '0' && str[i] <= '9')
{
flag2=1;
num = num * 10 + str[i] - '0';
if(flag)
{
if(num>pow(2,31)-1) //判断是否越界
{
num=pow(2,31)-1;
break;
}
}
else{
if(num>pow(2,31))
{
num=pow(2,31); //判断是否越界
break;
}
}
}
}
else
break;
}
if (flag)
return num;
else
return -num;
}
};
5.反转字符串(错题反思)
. - 力扣(LeetCode)
官方答案:
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.length();
for (int i = 0; i < n; i += 2 * k) {
reverse(s.begin() + i, s.begin() + min(i + k, n));
}
return s;
}
};