力扣 557. 反转字符串中的单词 III

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

示例:

输入:“Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”

输入:“hehhhhhhe”
输出:“ehhhhhheh”

提示:

在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

class Solution {
    public static void main(String[] args) {
//       String s="Let's take LeetCode contest";
       String s="hehhhhhhe";
        String s1 = new Solution().reverseWords(s);
        System.out.println(s1);
    }
    public String reverseWords(String s) {
        char[] chars = s.toCharArray();
        int left=0, right=0,flag=0;
        // 首先判断输入的字符串是不是没有空格,如"hehhhhhhe",若是,那直接反转,然后返回
        if (!s.contains(" ")){
            for (int i = 0; i < chars.length/2; i++) {
                char temp = chars[i];
                chars[i] = chars[chars.length-i-1];
                chars[chars.length-i-1] = temp;
            }
            return new String(chars);
        }
        // 如果给定的字符串是正常类型的字符串,如"Let's take LeetCode contest",那么通过以空格为界限,反转一个单词
        for (right = 0; right < chars.length; right++) {
            if(chars[right]== ' '){
                flag = right;
                for (int j = left, k=right-1; j < k; j++, k--) {
                    char temp = chars[j];
                    chars[j] = chars[k];
                    chars[k] = temp;
                }
                left = right+1;
            }
        }
        // 因为反转一个单词需要寻找下一个空格,所以最后一个单词没法反转,通过flag记录最后一个空格的位置,然后反转flag至最后的字符
        for (int j = flag+1, k=chars.length-1; j < k; j++, k--) {
            char temp = chars[j];
            chars[j] = chars[k];
            chars[k] = temp;
        }
        return new String(chars);
    }
}

你可能感兴趣的:(力扣,leetcode,算法,职场和发展)