将字符串反转

解题思路:现将整个字符串将"I am Student!"逆置,得到字符串"!tnedutS ma I",在逆置每一个单词,得到字符串"Student! am I";所以要写一个方法逆置数组,一个方法来判断单词,调用逆置数组的方法实现单词的逆置。

    /**
     * 逆置数组
     * @param array
     * @param a
     * @param b
     */
    public  static void swap(char[] array,int a,int b) {
        char tmp;
        for(;a < b;a++,b--) {
            tmp = array[a];
            array[a] = array[b];
            array[b] = tmp;
        }
    }

    /**
     * 循环向右移数组k位
     * @param string
     * @param k
     */
    public static String shift_k(String string,int k) {
        char[] chars = string.toCharArray();
        int n = chars.length;
        k = k % n;
        swap(chars,0,n-k-1);
        swap(chars,n-k,n-1);
        swap(chars,0,n-1);
        return String.valueOf(chars);
    }

    /**
     * 先逆置整个数组,然后找到每个单词,逆置每个单词
     * @param str
     * @return
     */
    public static String inversion(String str) {
        char[] chars = str.toCharArray();
        swap(chars,0,chars.length-1);//逆置整个数组
        int start = 0;
        //对每个单词反转
        for(int i = 1;i < chars.length;i++) {
            if(chars[i] == ' ') {
                swap(chars,start,i-1);
                start = i+1;
            }
        }
        swap(chars,start,chars.length-1);
        return String.valueOf(chars);
    }


    public static void main(String[] args) {
        String str1 = "abcdef";
        System.out.println(shift_k(str1,2));
        String str2 = "hello tulun and world!";
        System.out.println(inversion(str2));

    }

运行结果:

efabcd
world! and tulun hello

 

展开阅读全文

没有更多推荐了,返回首页