字符串的一些相关操作

给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

输入:s = "Let's take LeetCode contest"

输出:"s'teL ekat edoCteeL tsetnoc"

要点:反转字符但是只是其中的单词反转,开辟一个新字符串。然后从头到尾遍历原字符串,直到找到空格为,此时找到了一个单词,并能得到单词的起止位置。随后,根据单词的起止位置,可以将该单词逆序放到新字符串当中。如此循环多次,直到遍历完原字符串,就能得到翻转后的结果。这其中包括一个新函数,StringBuffer中的append将新字符插入到一个位置中。


代码:class Solution {


    public String reverseWords(String s) {


            StringBuffer  ret=new StringBuffer();


            int length=s.length();


            int i=0;


            while(i


                int start=i;//单词的首字母位置


                while(i


                    i++;


                }


                for(int p=start;p


                    ret.append(s.charAt(i+start-1-p));//i-1为单词末子母位置,-p代表单词长度,从后向前遍历


                }


                while(i


                    i++;


                    ret.append(' ');//加空格


                }


            } 


            return ret.toString();


    }


}


(2)另外一种方法就是不借助StringBuilder,直接操作字符数组,把String转为字符数组,原地操作,然后再把字符数组转成String返回。


用双指针指向原数组中的单词首尾,进行反转,然后向前步进到下一个单词。


代码:class Solution {


    public String reverseWords(String s) {


        char[] chars = s.toCharArray();


        for (int i = 0, j = 0; i <= chars.length; i++) {


            if (i == chars.length || chars[i] == ' ') {


                int k = i - 1;


                while (j < k) {


                    char t = chars[k];


                    chars[k] = chars[j];


                    chars[j] = t;


                    j++;


                    k--;


                }


                j = i + 1;


            }


        }


        return new String(chars);


    }


}

你可能感兴趣的:(字符串的一些相关操作)