1.輸入一個(gè)英語(yǔ)句子,翻轉(zhuǎn)句子中單詞的順序,但單詞內(nèi)字符的順序不變。為簡(jiǎn)單起見(jiàn),標(biāo)點(diǎn)符號(hào)和普通字母一樣處理。例如輸入字符串“I am a student。”,則輸出“student. a am I”。
算法思想:先翻轉(zhuǎn)整個(gè)句子,然后,依次翻轉(zhuǎn)每個(gè)單詞。并依據(jù)空格來(lái)判斷單詞起始和終止的位置。
可執(zhí)行代碼:
public class Solution { public String ReverseSentence(String str) { char[] chars = str.toCharArray(); reverse(chars, 0, chars.length - 1); int blank = -1; for(int i = 0;i < chars.length;i++){ if(chars[i] == ' '){ //若句子中存在空格 int nextBlank = i; reverse(chars,blank + 1,nextBlank - 1); blank = nextBlank; } } reverse(chars,blank + 1,chars.length - 1); //句子中的最后一個(gè)單詞進(jìn)行翻轉(zhuǎn) return new String(chars); } PRivate void reverse(char[] chars,int low,int high){ char temp; while(low < high){ temp = chars[low]; chars[low] = chars[high]; chars[high] = temp; low++; high--; } }}2.舉一反三:對(duì)于一個(gè)給定的字符序列S,請(qǐng)你把其循環(huán)左移K位后的序列輸出。例如,字符序列S=”abcXYZdef”,要求輸出循環(huán)左移3位后的結(jié)果,即“XYZdefabc”。算法思想:把上述字符串看成兩部分,前三個(gè)字符以及剩余的字符。首先,對(duì)前三個(gè)字符進(jìn)行翻轉(zhuǎn);然后對(duì)剩余部分進(jìn)行翻轉(zhuǎn);最后,對(duì)整個(gè)字符串進(jìn)行翻轉(zhuǎn)。
可執(zhí)行代碼:
public class Solution { public String LeftRotateString(String str,int n) { int len = str.length(); if(len == 0) return ""; n = n % len; char[] chars = str.toCharArray(); reverse(chars,0,n - 1); reverse(chars,n,chars.length - 1); reverse(chars,0,chars.length - 1); return new String(chars); } private void reverse(char[] chars,int low,int high){ char temp; while(low < high){ temp = chars[low]; chars[low] = chars[high]; chars[high] = temp; low++; high--; } }}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注