zoukankan      html  css  js  c++  java
  • 541--反转字符串

    觉得自己用了最蠢的方法,但也是自己写出来的,感谢我的表哥,给我改了错误。

    1、错误

    • 反转的时候上限写错了,应该全是k/2好吗!!!!
    • 一开始用了静态变量,表哥说没必要!!

    2、思路

    • 设置m是字符串长度对2k取余。
    • 若m=0,则就是对每2k个长度前k个字母取余modvalue
    • 若m!=0,则有两种情况,第一种长度小于2k,第二种长度是由n*2k+modvalue
    • 注意反转,无论modvalue是奇数还是偶数,均是i<modvalue/2,不用分情况,第一道反转字符串还傻不拉几分奇数和偶数

    3、代码实现

     1 class Solution {
     2 public:
     3     string reverseStr(string s, int k) {
     4         
     5         int s_length=s.size();
     6         int m=2*k;
     7         if(s_length%m==0){//如果字符串长度是2k的倍数
     8             int n=s_length/m;//计算有几个2k
     9             for(int i=1;i<n+1;i++)
    10             {
    11                  for(int j=2*(i-1)*k;j<2*(i-1)*k+k/2;j++)
    12                  {
    13                 
    14                 char temp;
    15                 temp=s[j];
    16                 s[j]=s[2*(i-1)*k+k-1-(j-2*(i-1)*k)];//之前定义静态变量,这里直接替换
    17                 s[2*(i-1)*k+k-1-(j-2*(i-1)*k)]=temp;
    18               
    19             }
    20             }
    21         }
    22         else
    23         {
    24             int modvalue=s_length%m;
    25             int n=s_length-modvalue;//判断这个字符串是不是总长就小于2k
    26             if(n==0)
    27             {
    28                 if(modvalue>k) 
    29             {
    30                 for(int i=0;i<k/2;i++)
    31                 {
    32                 char temp;
    33                 temp=s[i];
    34                 s[i]=s[k-1-i];
    35                 s[k-1-i]=temp;
    36                 }
    37              }
    38                 else
    39                 {
    40                 for(int i=0;i<modvalue/2;i++)
    41                 {
    42                 char temp;
    43                 temp=s[i];
    44                 s[i]=s[modvalue-1-i];
    45                 s[modvalue-1-i]=temp;
    46                 }
    47             }
    48             }
    49             else
    50             {
    51             int k1=n/m;
    52             for(int i=1;i<k1+1;i++)//先反转2k内的所有前k个字符
    53             {
    54                 for(int j=2*(i-1)*k;j<2*(i-1)*k+k/2;j++)
    55                  {
    56                 char temp;
    57                 temp=s[j];
    58                 s[j]=s[2*(i-1)*k+k-1-(j-2*(i-1)*k)];
    59                 s[2*(i-1)*k+k-1-(j-2*(i-1)*k)]=temp;
    60             }
    61             }  
    62            if(modvalue>k)
    63            {
    64                 for(int i=k1*2*k;i<k1*2*k+k/2;i++)//反转余数个字符
    65                 {
    66               
    67                 char temp;
    68                 temp=s[i];
    69                 s[i]=s[k1*2*k+k-1-(i-k1*2*k)];
    70                 s[k1*2*k+k-1-(i-k1*2*k)]=temp;
    71                 
    72                 }
    73              }
    74             else
    75             {
    76                 for(int i=k1*2*k;i<k1*2*k+modvalue/2;i++)
    77                 {
    78                 char temp;
    79                 temp=s[i];
    80                 s[i]=s[k1*2*k+modvalue-1-(i-k1*2*k)];
    81                 s[k1*2*k+modvalue-1-(i-k1*2*k)]=temp;
    82               
    83                 }
    84             }              
    85             }             
    86         }
    87          return s;
    88         
    89     }
    90 
    91 };

    4、运行结果

  • 相关阅读:
    参考文献
    Redis安装以及常见错误
    Linux下搭建Mysql主从遇到的问题
    Linux中创建虚拟环境安装问题
    python 二分查找算法
    python 递归函数
    python 内置函数
    python 装饰器
    初识正则表达式
    内置函数***
  • 原文地址:https://www.cnblogs.com/hehesunshine/p/11583957.html
Copyright © 2011-2022 走看看