每日一题 为了工作 2020 0414 第四十三题


/** * 【题目】 * 给定一个字符类型的数组chas, 请在单词间做逆序调整。只要做到单词顺序逆序即可, * 对空格的位置没有特别要求。 * 【举例】 * 如果把chas看作字符串为 "dog loves pig", 调整成"pig Loves dog"。 * 如果把chas看作字符串为 "I'm a student.", 调整成" student. a I'm"。 * 【解答】 * 首先把chas整体逆序。在逆序之后, 遍历chas找到每一个单词, 然后把每个单词里的 * 字符逆序即可。比如"dog loves pig", 先整体逆序变为"gip sevol god", 然后每个 * 单词进行逆序处理就变成了"pig loves dog"。逆序之后找每一个单词的逻辑, 做到不出 * 错即可。 */

  

*代码

public class RotateString {

    public char[] rotateString(char chas[]){
        if (chas==null ||chas.length==0){
            return null;
        }
        reverse(chas,0,chas.length-1);
        int left = -1;
        int right = -1;
        for (int i=0;i<chas.length;i++){
            if (chas[i]!=' '){
                //是不是起始元素 或者当前元素的前一个元素是空
                left = (i == 0||chas[i-1]==' ')?i:left;
                //是不是结束元素 或者当前元素的后一个元素为空
                right = (i == chas.length-1||chas[i+1]==' ')?i:right;
            }
            if (left != -1 && right != -1){
                reverse(chas,left,right);
                left=-1;
                right=-1;
            }
        }
        return chas;
    }
    public void reverse(char chas[],int start,int end){
        char tmp = 0;
        while (start < end){
            tmp = chas[start];
            chas[start]=chas[end];
            chas[end]=tmp;
            start++;
            end--;
        }
    }

    public static void main(String[] args) {
        char chas[]={'p','i','g',' ',' ','l','o','v','e'};
        RotateString rs = new RotateString();
        rs.showCharArray(chas);
        rs.rotateString(chas);
        rs.showCharArray(chas);
    }
    public void showCharArray(char chas[]){
        for (char cha :chas){
            System.out.print(cha+"\t");
        }
        System.out.println();
    }
}

  

*运行结果

 

猜你喜欢

转载自www.cnblogs.com/walxt/p/12697418.html