给定一个字符串,逐个翻转字符串中的每个单词。

LintCode中的反转字符串,自己写的不对 参考答案写出的

思路: 先将整个数组反转,然后根据空格出现的位置,判断每个单词,再将整个单词反转  这里每个单词的位置是 index - i-1

但是由于不能保证最后一个单词后面还有空格,所以最后一个要单独反转

public class Test {
    public static void  main(String [] args)
    {
         char [] c = {'a','b', ' ','d',' ','e','r'};
         char [] s = reverseWords(c);
         System.out.print(s);
         
         
    }
    
    public static char[] reverseWords(char[] str) {
        if(str == null || str.length == 0){
            return str;
        }
        
        //翻转整个数组
        reverse(str, 0, str.length - 1);
        
        int index = 0;
        
        //翻转每一个单词
        for(int i = 0; i < str.length; i++){
            if(str[i] == ' ')
            {
                reverse(str, index, i - 1);
                index = i + 1;
            }
        }
        
        //翻转最后一个单词
        reverse(str, index, str.length - 1);
        
        return str;
    }
    
    private static void reverse(char[] str, int start, int end){
        while(start <= end){
            char temp = str[start];
            str[start] = str[end];
            str[end] = temp;
            start++;
            end--;
        }
    }
}
 

你可能感兴趣的:(Lintcode)