翻转字符串

导读:本篇文章讲解 翻转字符串,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

题目:

给定一个字符类型的数组 chas,请在单词间做逆序调整。只要做到单词的顺序逆序即可,对空格位置没有特别要求。

举例:

“dog loves pig”,调整成 “pig loves dog”。

“I’m a student.”,调整成”student. a I’m”。

思路:

先把 chas 整体逆序,再把每一个单词逆序。

代码实现:

    //逆序整体之后把每个单词逆序回来
    public static void rotateWord(char[] chas) {
        if (chas == null || chas.length == 0) {
            return;
        }
        reverse(chas, 0, chas.length - 1);
        int left = -1;
        int right = -1;
        //把每个单词逆序回来  现在是"gip sevol god"
        for (int i = 0; i < chas.length; i++) {
            //当当前字符不是空格的时候
            if (chas[i] != ' ') {
                //找到每一个单词的第一个字母和最后一个字母的位置,用left和right表示
                //如果当前遍历的位置是0 或者当前位置的前一个位置是空格,那么说明当前位置是一个单词的开头
                left = i == 0 || chas[i-1] == ' ' ? i : left;
                //如果当前遍历的位置是chas.length-1 或者当前位置的下一个位置是空格,那么说明当前位置是一个单词的结尾
                right = i == chas.length-1 || chas[i+1] == ' ' ? i : right;
            }
            if (left != -1 && right != -1) {
                //逆序每一个单词
                reverse(chas,left,right);
                //将left和right复原为-1,继续下一次遍历,找下一个需要逆序的单词的left和right
                left = -1;
                right = -1;
            }
        }
        
    }
   //逆序整体 
    public static 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--;
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/87941.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!