/*** 反轉(zhuǎn)字符串中單詞順序,I am a software engineer -> engineer software a am I* @author liaojiamin* @Date:Created in 16:59 2021/7/1*/publicclassReverStr{publicstaticvoidmain(String[] args){String str ="I am a software engineer";char[] target = str.toCharArray();char[] result_1 =reverTwice(target);for(char c : result_1){System.out.print(c);}}/*** 方案二:反轉(zhuǎn)兩次* 先全部反轉(zhuǎn)字符,在逐個(gè)單詞顛倒* 時(shí)間復(fù)雜度O(n) 空間復(fù)雜度O(1)* */publicstaticchar[]reverTwice(char[] target){if(target == null || target.length <=0){return target;}target =reverAll(target,0, target.length -1);int[] isSpace =newint[target.length];int positionSpace =0;for(int i =0; i < target.length; i++){if(target[i]==' '){isSpace[positionSpace++]= i;}}positionSpace--;int start =0;for(int i =0;; i++){int end = target.length -1;if(i <= positionSpace){end = isSpace[i]-1;}target =reverAll(target, start, end);if(i <= positionSpace){start = isSpace[i]+1;}else{return target;}}}/*** 按指定位置反轉(zhuǎn)* */publicstaticchar[]reverAll(char[] target,int start,int end){while(start < end){char temp = target[start];target[start]= target[end];target[end]= temp;start++;end--;}return target;}}
變種題型
題目:定義字符串的左旋轉(zhuǎn)操作就是把字符串簽名的若干字符轉(zhuǎn)移到字符的尾部。請(qǐng)定義一個(gè)函數(shù),實(shí)現(xiàn)字符串的左旋操作功能, 例如輸入字符串I am a software engineer 4 -> a software engineerI am
/*** 指定位置反轉(zhuǎn)字符串* 案例 I am a software engineer 4 -> a software engineerI am* @author liaojiamin* @Date:Created in 18:47 2021/7/1*/publicclassReverPositionStr{publicstaticvoidmain(String[] args){char[] target ="I am a software engineer".toCharArray();char[] result =reverPosition(target,4);for(char c : result){System.out.print(c);}}/*** 方案一:空間換時(shí)間* 時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)* */publicstaticchar[]reverPosition(char[] target,int position){if(target == null || target.length <=0|| target.length <= position){return target;}char[] result =newchar[target.length];int positionResult =0;for(int i = position; i < target.length; i++){result[positionResult++]=target[i];}for(int i=0;i<position;i++){result[positionResult++]= target[i];}return result;}}