首页 > 其他分享 >代码随想录(4)-字符串

代码随想录(4)-字符串

时间:2023-03-16 19:22:19浏览次数:33  
标签:end start int 反转 代码 随想录 cs 字符串

344.反转字符串

题目
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

代码

class Solution {
    public void reverseString(char[] s) {
        int len = s.length;
        int middle = (int) (len / 2.0 );
        for(int i = 0; i < middle; i++){
            char c = s[i];
            s[i] = s[len-1-i] ;
            s[len-1-i] = c;
        }
    }
}

541.反转字符串 II

题目:给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

代码

class Solution {
    public String reverseStr(String s, int k) {
        char[] cs = s.toCharArray();
        int times = cs.length / (2 * k);

        for(int i = 0; i < times; i++){
            int start = i * 2 * k;
            int end = start + k;
            func(cs,start ,end);
        }
        int start = times * 2 * k;
        int end = start + k;
        if( cs.length % ( 2 *  k ) < k){
            end = start + cs.length % ( 2 *  k );
        }
        func(cs,start ,end);
        return new String(cs);
    }
    // 将字符串反转,反转下标start到end-1的范围
    void func(char[] cs, int start ,int end){
        int middle = (int) ( (end - start) / 2.0);
        for( int j = 0; j < middle; j++){
            char c = cs[ start + j];
            cs[ start + j] = cs[ end - 1 - j];
            cs[ end - 1 - j] = c;
        }
    }
}

标签:end,start,int,反转,代码,随想录,cs,字符串
From: https://www.cnblogs.com/qiuye98/p/programmercarl-string.html

相关文章