剑指Offer-58:翻转字符串
2018-03-20 14:48
369 查看
题目一:翻转单词顺序
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例子:
如,输入字符串“I am a student.”,则输出“student. a am I”。链接:
剑指Offer(第2版):P284思路标签:
算法:句子翻转 + 单词翻转解答:
第一步:翻转整个句子;第二步:翻转每个单词。
注意:句子和单词的边界条件处理。
class Solution { public: string ReverseSentence(string str) { if(str.length() <= 0) return str; int begin = 0; int end = str.length()-1; //反转整个句子 Reverse(begin, end, str); //反转句子中的每个单词 begin = end = 0; while(str[begin] != '\0'){ if(str[begin] == ' '){ begin++; end++; } else if(str[end] == ' ' || str[end] == '\0'){ Reverse(begin, --end, str); begin = ++end; } else end++; } return str; } void Reverse(int begin, int end, string& str){ if(begin < 0 || end < 0) return; while(begin < end){ char temp = str[begin]; str[begin] = str[end]; str[end] = temp; begin++; end--; } } };
题目二:左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋操作的功能。例子:
如,输入字符串“abcdefg”和数字2,该函数将返回左旋两位得到的结果“cdefgab”。链接:
剑指Offer(第2版):P286思路标签:
算法:双指针解答:
和上面的思路类似,我们可以将字符串分成两部分,先分别翻转两部分子字符串;然后对翻转后的字符串整体再进行一次翻转。
class Solution { public: string LeftRotateString(string str, int n) { int length = str.length(); if(length > 0 && n > 0 && n < length){ int firstBegin = 0; int firstEnd = n-1; int secondBegin = n; int secondEnd = length - 1; Reverse(firstBegin, firstEnd, str); Reverse(secondBegin, secondEnd, str); Reverse(firstBegin, secondEnd, str); } return str; } void Reverse(int begin, int end, string &str){ if(begin < 0 || end < 0) return; while(begin < end){ char temp = str[begin]; str[begin] = str[end]; str[end] = temp; begin++; end--; } return; } };
相关文章推荐
- 剑指Offer面试题58:翻转字符串
- 剑指offer——翻转单词顺序VS左旋转字符串
- 剑指offer42——翻转字符串vs左旋
- [剑指offer]翻转句子 ; 左旋字符串
- 剑指offer——翻转单词顺序VS左旋转字符串
- 剑指Offer面试题42:翻转单词顺序;左旋转字符串 Java实现
- 剑指offer之面试题42翻转单词顺序VS左旋转字符串
- 剑指Offer面试题41和为s的两个数字与和为s的连续正数序列,面试题42翻转单词顺序与左旋转字符串
- 【剑指offer】面试题58(2):左旋转字符串
- 剑指offer面试题 翻转单词顺序 VS 左旋转字符串
- 剑指offer-第六章面试中的各项能力(翻转单词的顺序VS左旋转字符串)
- 剑指offer 面试题42 翻转单词顺序 | 左旋转字符串
- 剑指offer-面试题42-翻转单词顺序VS左旋转字符串
- LintCode-剑指Offer-(53)翻转字符串
- 剑指offer--之翻转字符串
- 翻转字符串(剑指offer42)
- 剑指offer 面试题42—翻转单词顺序VS左旋转字符串
- 剑指 offer set 19 翻转单词顺序 && 字符串左旋
- 剑指offer 面试题42 翻转单词顺序 VS 左旋转字符串
- 剑指offer 42 - 翻转单词顺序 左旋转字符串