• LeetCode125验证一个字符串是否是回文 415字符串相加 541反转字符串 II


    题一:

    125. 验证回文串 - 力扣(LeetCode)icon-default.png?t=M666https://leetcode.cn/problems/valid-palindrome/submissions/

    解决此题之前首先来学习一个库函数:

     代码解析:

    1. class Solution {
    2. public:
    3. bool IsNumberOrLetter(char c)
    4. {
    5. if(c>='a'&&c<='z')
    6. return true;
    7. if(c>='A'&&c<='Z')
    8. return true;
    9. if(c>='0'&&c<='9')
    10. return true;
    11. return false;
    12. }
    13. bool isPalindrome(string s)
    14. {
    15. int begin=0,end=s.size()-1;
    16. while(begin < end)
    17. {
    18. while(begin<end && !IsNumberOrLetter(s[begin]))
    19. {
    20. begin++;
    21. }
    22. while(begin<end && !IsNumberOrLetter(s[end]))
    23. {
    24. end--;
    25. }
    26. if(tolower(s[begin])!=tolower(s[end]))
    27. return false;
    28. begin++;
    29. end--;
    30. }
    31. return true;
    32. }
    33. };

    题二:

    415. 字符串相加 - 力扣(LeetCode)icon-default.png?t=M666https://leetcode.cn/problems/add-strings/

    注意std提供的reverse函数需要传起始位置和末尾位置的迭代器

    代码解析: 

    法一:

    1. class Solution {
    2. public:
    3. string addStrings(string num1, string num2)
    4. {
    5. string s;
    6. int p1=num1.size()-1,p2=num2.size()-1;
    7. int next=0;//表示进位
    8. int num=0;
    9. while(p1>=0 || p2>=0)//任意一个为真都会进入循环,意味着两个同时遍历结束
    10. {
    11. int x1=0,x2=0;//每次循环都定义为0
    12. if(p1>=0)
    13. {
    14. x1=num1[p1]-'0';//注意要将char类型转换成int类型,需要减字符0
    15. }
    16. if(p2>=0)
    17. {
    18. x2=num2[p2]-'0';
    19. }
    20. num=x1+x2+next;
    21. if(num>9)
    22. {
    23. num=num%10;
    24. s+=num+'0';//注意要将int类型转换成char类型,需要加字符0
    25. next=1;
    26. }
    27. else
    28. {
    29. s+=num+'0';
    30. next=0;
    31. }
    32. p1--;
    33. p2--;
    34. }
    35. if(next!=0)//最后处理剩余的进位
    36. s+='1';
    37. reverse(s.begin(),s.end());
    38. return s;
    39. }
    40. };

     法二:

    1. class Solution {
    2. public:
    3. string addStrings(string num1, string num2)
    4. {
    5. string s;
    6. int p1=num1.size()-1,p2=num2.size()-1;
    7. int next=0;//表示进位
    8. int num=0;
    9. int x1=0,x2=0;
    10. while(p1>=0 && p2>=0)//其中一个结束循环就结束
    11. {
    12. x1=num1[p1]-'0';//注意要将char类型转换成int类型,需要减字符0
    13. x2=num2[p2]-'0';
    14. num=x1+x2+next;
    15. if(num>9)
    16. {
    17. num=num%10;
    18. s+=num+'0';//注意要将int类型转换成char类型,需要加字符0
    19. next=1;
    20. }
    21. else
    22. {
    23. s+=num+'0';
    24. next=0;
    25. }
    26. p1--;
    27. p2--;
    28. }
    29. //循环结束过后判断到底是哪一个字符串先结束
    30. while(p1>=0)
    31. {
    32. x1=num1[p1]-'0';
    33. x2=0;
    34. num=x1+x2+next;
    35. if(num>9)
    36. {
    37. num=num%10;
    38. s+=num+'0';//注意要将int类型转换成char类型,需要加字符0
    39. next=1;
    40. }
    41. else
    42. {
    43. s+=num+'0';
    44. next=0;
    45. }
    46. p1--;
    47. }
    48. while(p2>=0)
    49. {
    50. x1=0;
    51. x2=num2[p2]-'0';
    52. num=x1+x2+next;
    53. if(num>9)
    54. {
    55. num=num%10;
    56. s+=num+'0';
    57. next=1;
    58. }
    59. else
    60. {
    61. s+=num+'0';
    62. next=0;
    63. }
    64. p2--;
    65. }
    66. if(next!=0)//最后处理剩余的进位
    67. s+='1';
    68. reverse(s.begin(),s.end());
    69. return s;
    70. }
    71. };

    题三:

    力扣icon-default.png?t=M666https://leetcode.cn/problems/reverse-string-ii/

    代码解析:

    法一:

    1. class Solution {
    2. public:
    3. string reverseStr(string s, int k)
    4. {
    5. int begin1=0,begin2=0;
    6. int n=s.size();//用n记录字符串存放字符的个数
    7. int r=(n+k)/4;//找到需要反转的字符次数与个数的关系,利用反转的字符次数来循环
    8. int num=0;
    9. while(r)
    10. {
    11. begin1=num*2*k;//定义反转开始的位置
    12. if(n-begin1>k)//如果剩余的个数大于k,那么begin2跳转即可
    13. {
    14. begin2=begin1+k-1;
    15. }
    16. else//如果小于等于k个
    17. {
    18. begin2=n-1;
    19. }
    20. while(begin1<=begin2)//循环反转
    21. {
    22. swap(s[begin1],s[begin2]);
    23. begin1++;
    24. begin2--;
    25. }
    26. num++;//跳到下一组的开头
    27. r--;//反转次数每次减1
    28. }
    29. return s;
    30. }
    31. };

    法二:

    1. class Solution {
    2. public:
    3. string reverseStr(string s, int k)
    4. {
    5. int begin1=0,begin2=0;
    6. int n=s.size();//用n记录字符串存放字符的个数
    7. int r=(n+k)/4;//找到需要反转的字符次数与个数的关系,利用反转的字符次数来循环
    8. int num=0;
    9. while(r)
    10. {
    11. begin1=num*2*k;//定义反转开始的位置
    12. if(n-begin1>k)//如果剩余的个数大于k,那么begin2跳转即可
    13. {
    14. begin2=begin1+k;
    15. }
    16. else//如果小于等于k个
    17. {
    18. begin2=n;
    19. }
    20. reverse(s.begin()+begin1,s.begin()+begin2);
    21. num++;//跳到下一组的开头
    22. r--;//反转次数每次减1
    23. }
    24. return s;
    25. }
    26. };

     

  • 相关阅读:
    金仓数据库 KingbaseES 插件参考手册(25. dict_xsyn)
    ASPX与ASP URL传递值问题
    207、室外远距离点对点无线网桥组网方案
    STL容器适配器之stack与queue
    【计算机毕业设计】基于JSP的网上购物系统的设计与实现
    博客系统(页面设计)
    6种常见三维曲面的Three.js实现
    现网常见问题及解决思路
    docker对网络和程序速度的影响
    验证码(easy-captcha)
  • 原文地址:https://blog.csdn.net/weixin_56054625/article/details/126354859