java算法3~翻转字符串

来源:互联网 发布:白鲨外设淘宝店好 编辑:程序博客网 时间:2024/06/07 22:15

要求:

     1、"you       are  a      dog" 变为  great   are  you

     2、时间复杂度O(N)


思路:

       1、先将String转换成char[],

       2、将char[]整体逆序,得到        god      a  era       uoy

       3、将char[]中每一个单词再逆序   dog      a  are       you


package algorithm_database;/** *  翻转字符串:you are great  变为  great are  you *  */public class InverseString {      public static void main(String[] args){        String str = "you       are a      dog";        char[] charStr = str.toCharArray();        inverse(charStr,0,charStr.length-1);        System.out.println(charStr);        int l = -1;        int r = -1;        for(int i=0;i<charStr.length;i++){            if(charStr[i] !=' '){                l = i==0 || charStr[i-1]==' ' ?i:l;               //很难理解?为了找每一个单词的初始下标                r = i==charStr.length-1||charStr[i+1]==' ' ?i:r;  //很难理解?为了找每一个单词的结束下标            }            if(l!=-1 && r!=-1){                inverse(charStr,l,r);                l = -1;                r = -1;            }        }        System.out.println(charStr);    }        public static char[] inverse(char[] charStr,int start ,int end){        while(start<end){            char temp = charStr[start];            charStr[start] = charStr[end];            charStr[end] = temp;            start++;            end--;        }        return charStr;    }}

找下标的逻辑有些不好理解,其他的都很容易

1 0
原创粉丝点击