翻转单词顺序VS左旋转字符串
来源:互联网 发布:js设置cookie永不过期 编辑:程序博客网 时间:2024/05/21 06:20
题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.”,则输出“student. a am I”。
分析:
这个问题可以分成两个过程来解决:
1.翻转整个句子,翻转结果为.tneduts a ma I
2.再将里面的每个单词翻转一次,结果为student. a am I
class Solution{public: string ReverseSentence( string str ) { string result = str; if ( str.empty() ) return str; int start = 0, end = result.size()-1; Reverse( result, start, end ); //cout << result << endl; end = start = 0; while ( start < str.size() ) { if ( result[start] == ' ' ) { start++; end++; } else if ( result[end] == ' ' || result[end] == '\0' ) { Reverse( result, start, --end ); //cout << "reverse start : " << start << "end : " << end << result << endl; start = ++end; } else { end++; } } return result; } void Reverse( string& str, int start, int end ) { if ( str.empty() ) return ; while ( start < end ) { char temp = str[start]; str[start] = str[end]; str[end] = temp; start++; end--; } }};int main( void ){ string str = "i am a student."; Solution sos; string result = sos.ReverseSentence( str ); cout << result << endl; return 0;}
题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串“abcdefg”和数字2,该函数将返回左旋转2位得到的结果“cdefgab”。
分析:
主要有两中思路:
1.最简单,最直观的就是利用辅助数组解决,先将要旋转的前n个字符保存到一个临时辅助数组中,然后将其余字符向前移动n位,然后将辅助数组中的n个字符放置到原字符串的后n位。
2.利用题目一中的思路,先将整个字符串翻转,然后再翻转后n个字符串,再翻转前面剩下的字符串,可以实现字符串的左旋转。
思路一:辅助数组
class Solution{public: string LeftRotateString( string str, int n ) { if ( n <= 0 ) return str; if ( str.size() <= n || str.empty() ) return str; string temp( str, 0, n ); int j = 0; for ( int i = n; i < str.size(); i++, j++ ) { str[j] = str[i]; } for ( int i = 0; i < temp.size(); i++, j++ ) { str[j] = temp[i]; } return str; }};int main( void ){ string str = "abcdefg"; Solution sos; cout << sos.LeftRotateString( str, 2 ) << endl; return 0;}
思路二:翻转
class Solution{public: string LeftRotateString( string str, int n ) { if ( n <= 0 || str.size() <= n || str.empty() ) return str; Reverse( str, 0, n-1 ); Reverse( str, n, str.size()-1 ); Reverse( str, 0, str.size()-1 ); return str; } void Reverse( string& str, int start, int end ) { if ( str.empty() ) return ; while ( start < end ) { char temp = str[start]; str[start] = str[end]; str[end] = temp; start++; end--; } }};int main( void ){ string str = "abcdefg"; Solution sos; cout << sos.LeftRotateString( str, 2 ) << endl; return 0;}
阅读全文
0 0
- 翻转单词顺序VS左旋转字符串
- 翻转单词顺序 VS 左旋转字符串
- 翻转单词顺序VS左旋转字符串
- 翻转单词顺序vs左旋转字符串
- 翻转单词顺序VS左旋转字符串
- 翻转单词顺序VS左旋转字符串----->“字符串翻转”
- 剑指Offer之 - 翻转单词顺序 VS 左旋转字符串
- 面试题42:翻转单词顺序VS左旋转字符串
- 42.翻转单词顺序VS左旋转字符串
- 面试题46:翻转单词顺序VS左旋转字符串
- 翻转单词顺序 VS 左旋转字符串43
- Q42:翻转单词顺序VS左旋转字符串
- 剑指offer 42. 翻转单词顺序VS左旋转字符串
- 面试题42:翻转单词顺序VS左旋转字符串
- 算法题目---翻转单词顺序 VS 左旋转字符串
- 面试题42:翻转单词顺序 VS 左旋转字符串
- 翻转单词序列 vs 左旋转字符串
- 左旋转字符串LeftRotateString -- 翻转单词顺序
- 三、序列式容器
- ssh 免密码设置失败原因总结
- UVA-624 记录路径dp
- dos命令查找mysql数据库
- MD5 32位加密
- 翻转单词顺序VS左旋转字符串
- 花书学习笔记(2) 病态、梯度优化、约束优化
- AS自定义keystore获取SHA1
- 正则表达式
- 关于使用了ztree后排序的问题
- 通过Strace定位故障原因
- php--redis数据复制
- maven项目报java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- 常用技巧精选之尺取法