题一:
125. 验证回文串 - 力扣(LeetCode)
https://leetcode.cn/problems/valid-palindrome/submissions/
解决此题之前首先来学习一个库函数:

代码解析:
- class Solution {
- public:
- bool IsNumberOrLetter(char c)
- {
- if(c>='a'&&c<='z')
- return true;
- if(c>='A'&&c<='Z')
- return true;
- if(c>='0'&&c<='9')
- return true;
- return false;
- }
- bool isPalindrome(string s)
- {
- int begin=0,end=s.size()-1;
- while(begin < end)
- {
- while(begin<end && !IsNumberOrLetter(s[begin]))
- {
- begin++;
- }
- while(begin<end && !IsNumberOrLetter(s[end]))
- {
- end--;
- }
- if(tolower(s[begin])!=tolower(s[end]))
- return false;
- begin++;
- end--;
- }
- return true;
- }
- };
题二:
415. 字符串相加 - 力扣(LeetCode)
https://leetcode.cn/problems/add-strings/

代码解析:
法一:
- class Solution {
- public:
- string addStrings(string num1, string num2)
- {
- string s;
- int p1=num1.size()-1,p2=num2.size()-1;
- int next=0;//表示进位
- int num=0;
- while(p1>=0 || p2>=0)//任意一个为真都会进入循环,意味着两个同时遍历结束
- {
- int x1=0,x2=0;//每次循环都定义为0
- if(p1>=0)
- {
- x1=num1[p1]-'0';//注意要将char类型转换成int类型,需要减字符0
- }
- if(p2>=0)
- {
- x2=num2[p2]-'0';
- }
- num=x1+x2+next;
- if(num>9)
- {
- num=num%10;
- s+=num+'0';//注意要将int类型转换成char类型,需要加字符0
- next=1;
- }
- else
- {
- s+=num+'0';
- next=0;
- }
- p1--;
- p2--;
- }
- if(next!=0)//最后处理剩余的进位
- s+='1';
- reverse(s.begin(),s.end());
- return s;
- }
- };
法二:
- class Solution {
- public:
- string addStrings(string num1, string num2)
- {
- string s;
- int p1=num1.size()-1,p2=num2.size()-1;
- int next=0;//表示进位
- int num=0;
- int x1=0,x2=0;
- while(p1>=0 && p2>=0)//其中一个结束循环就结束
- {
- x1=num1[p1]-'0';//注意要将char类型转换成int类型,需要减字符0
- x2=num2[p2]-'0';
- num=x1+x2+next;
- if(num>9)
- {
- num=num%10;
- s+=num+'0';//注意要将int类型转换成char类型,需要加字符0
- next=1;
- }
- else
- {
- s+=num+'0';
- next=0;
- }
- p1--;
- p2--;
- }
- //循环结束过后判断到底是哪一个字符串先结束
- while(p1>=0)
- {
- x1=num1[p1]-'0';
- x2=0;
- num=x1+x2+next;
- if(num>9)
- {
- num=num%10;
- s+=num+'0';//注意要将int类型转换成char类型,需要加字符0
- next=1;
- }
- else
- {
- s+=num+'0';
- next=0;
- }
- p1--;
- }
- while(p2>=0)
- {
- x1=0;
- x2=num2[p2]-'0';
- num=x1+x2+next;
- if(num>9)
- {
- num=num%10;
- s+=num+'0';
- next=1;
- }
- else
- {
- s+=num+'0';
- next=0;
- }
- p2--;
- }
- if(next!=0)//最后处理剩余的进位
- s+='1';
- reverse(s.begin(),s.end());
- return s;
- }
- };
题三:
力扣
https://leetcode.cn/problems/reverse-string-ii/
代码解析:
法一:
- class Solution {
- public:
- string reverseStr(string s, int k)
- {
- int begin1=0,begin2=0;
- int n=s.size();//用n记录字符串存放字符的个数
- int r=(n+k)/4;//找到需要反转的字符次数与个数的关系,利用反转的字符次数来循环
- int num=0;
- while(r)
- {
- begin1=num*2*k;//定义反转开始的位置
- if(n-begin1>k)//如果剩余的个数大于k,那么begin2跳转即可
- {
- begin2=begin1+k-1;
- }
- else//如果小于等于k个
- {
- begin2=n-1;
- }
- while(begin1<=begin2)//循环反转
- {
- swap(s[begin1],s[begin2]);
- begin1++;
- begin2--;
- }
- num++;//跳到下一组的开头
- r--;//反转次数每次减1
- }
- return s;
- }
- };
法二:
- class Solution {
- public:
- string reverseStr(string s, int k)
- {
- int begin1=0,begin2=0;
- int n=s.size();//用n记录字符串存放字符的个数
- int r=(n+k)/4;//找到需要反转的字符次数与个数的关系,利用反转的字符次数来循环
- int num=0;
- while(r)
- {
- begin1=num*2*k;//定义反转开始的位置
- if(n-begin1>k)//如果剩余的个数大于k,那么begin2跳转即可
- {
- begin2=begin1+k;
- }
- else//如果小于等于k个
- {
- begin2=n;
- }
- reverse(s.begin()+begin1,s.begin()+begin2);
- num++;//跳到下一组的开头
- r--;//反转次数每次减1
- }
- return s;
- }
- };