1.输入一个英语句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student。”,则输出“student. a am I”。
算法思想:先翻转整个句子,然后,依次翻转每个单词。并依据空格来判断单词起始和终止的位置。
可执行代码:
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); //句子中的最后一个单词进行翻转 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.举一反三:对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。算法思想:把上述字符串看成两部分,前三个字符以及剩余的字符。首先,对前三个字符进行翻转;然后对剩余部分进行翻转;最后,对整个字符串进行翻转。
可执行代码:
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--; } }}
新闻热点
疑难解答