面试题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 };

 

posted @ 2016-04-06 14:39  早杰  阅读(154)  评论(0编辑  收藏  举报