【面试题】翻转吧!字符串!
来源:互联网 发布:js原生查找标签 编辑:程序博客网 时间:2024/06/07 15:53
题目1:输入一个英文句子,翻转句子中单词的顺序,但单词内部的顺序不可改变。例如 I am a student. 翻转后变为 student. a am I
经典解法:两步翻转,先整体翻转,再以空格为分隔,部分翻转。所以需要一个翻转函数。
翻转函数:
void Reverse(string::iterator begin,string::iterator end) { if(begin == end) return ; while(begin<end) { char tmp = *begin; *begin = *end; *end = tmp; ++begin; --end; } }
string ReverseSentence(string str) { if(str.empty() || str.size() < 2) return str; Reverse(str.begin(),--str.end()); string::iterator head = str.begin(); string::iterator tail = str.begin(); string::iterator end = str.end(); while(head != end) { if(*head == ' ') { ++head; ++tail; } else if(*tail == ' ' || tail == end) { Reverse(head,--tail); head = ++ tail; } else { ++tail; } } return str; }
题目2:左旋字符串,就是把字符串前面若干个字符转移到字符串的尾部。例如:abcdefg ,和数字2,左旋后变为 cdefgab
解法:三步翻转法,将字符串分为两部分 ab cdefg ,先翻转这两部分,再整体翻转。即ba gfedc -> cdefgab
string LeftRotateString(string str, int n) { int size = str.size(); if(size<2||n <= 0 || n>=size) return str; string::iterator it = str.begin(); string::iterator begin = str.begin(); string::iterator end = str.end(); while(it < end) { if(it == (begin+n-1)) { Reverse(begin,it); Reverse(++it,--end); Reverse(begin,end); break; } ++it; } return str; }
0 0
- 【面试题】翻转吧!字符串!
- 面试题 字符串翻转
- PHP字符串翻转面试题
- 字符串面试题系列之一:翻转字符串顺序
- 面试题---单词翻转
- java面试题之 使用两个int翻转字符串
- 面试题:编程实现将字符串的各个单词翻转
- 面试题42:翻转单词顺序VS左旋转字符串
- 面试题46:翻转单词顺序VS左旋转字符串
- 面试题42:翻转单词的顺序,左旋转字符串
- 面试题42:翻转单词顺序,左旋转字符串
- PHP面试题——PHP字符串翻转函数
- 面试题2之翻转一个给定的字符串
- 面试题------字符串翻转I am a student
- 面试题42:翻转单词顺序VS左旋转字符串
- 面试题42:翻转单词顺序 VS 左旋转字符串
- 【经典面试题】翻转单链表
- 面试题:链表翻转。
- Android 启动页面优化 (白屏 、等待的问题)
- javascript学习two
- mysql创建用户,并授权
- ACM-采药
- 设计模式原则—接口隔离原则(ISP)
- 【面试题】翻转吧!字符串!
- 第四部分 程序编译与代码优化
- 我学嵌入式
- 技术积累20170413
- Java 集合框架浅识
- sdut_java_分类游戏
- 什么是JavaScript解析引擎?
- Android中的ImageView和ImageButton
- private的应用