首页 > 其他分享 >代码随想录打卡第8天 | 反转字符串 反转字符串II 替换空格 翻转字符串里的单词 左旋转字符串

代码随想录打卡第8天 | 反转字符串 反转字符串II 替换空格 翻转字符串里的单词 左旋转字符串

时间:2023-02-22 23:02:50浏览次数:34  
标签:空格 字符 int 反转 随想录 单词 字符串

反转字符串 

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

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

  1, 双指针 so easy


 

反转字符串|| 

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

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

  1, 循环的周期

for(int i= 0;i<s.length();i+=2*k){
            int left = i;
            int right = Math.min(s.length()-1,i+k-1);

            while(left<right){
                ...
            }
        }

替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

  1, 数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。

  2, 双指针


 

翻转字符串里的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

  这题实在不会, 背一遍吧, 等二刷

    public String reverseWords(String s) {
        //每次循环记录right, 新数组添加完单词后+" ", 结尾的空格不返回
        char[] initialArr = s.toCharArray();
        char[] newArr = new char[s.length()+1];
        int newArrPos = 0;
        int i = initialArr.length-1; // 原数组最后一位

        while(i>=0){
            while(i>=0&&initialArr[i]==' ') i--; //跳过空格

            int right = i;
            while(i>=0&&initialArr[i]!=' ') i--;
            for(int j = i+1;j<=right;j++){
                newArr[newArrPos++]=initialArr[j];
                if(j==right){
                    newArr[newArrPos++]=' ';
                }
            }
        }

        if(newArrPos==0){
            return "";
        }else{
            return new String(newArr,0,newArrPos-1);
        }

    }

左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

  

 

标签:空格,字符,int,反转,随想录,单词,字符串
From: https://www.cnblogs.com/Liu5419/p/17146329.html

相关文章