面试题42 左旋转字符串
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
1 class Solution { 2 public: 3 string LeftRotateString(string str, int n) { 4 int len = str.length(); 5 if(len == 0) return ""; 6 n = n % len; 7 str += str; 8 return str.substr(n, len); 9 } 10 };
题目描述
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
1 class Solution { 2 public: 3 void Reverse(string &str, int i, int j) { 4 while (i < j) { 5 char temp = str[i]; 6 str[i] = str[j]; 7 str[j] = temp; 8 i++; 9 j--; 10 } 11 } 12 13 string ReverseSentence(string str) { 14 if (str.length() == 0) { 15 return ""; 16 } 17 int i = 0, j = str.length() - 1; 18 Reverse(str, i, j); 19 i = j = 0; 20 while (i < str.length()) { 21 if (str[i] == ' ') { 22 i++; 23 j++; 24 } 25 else if (str[j] == ' ' || j == str.length() - 1) { 26 int t = j; 27 if (str[t] == ' ') 28 t--; 29 Reverse(str, i, t); 30 i = ++j; 31 } 32 else 33 j++; 34 } 35 return str; 36 } 37 };