JD_题目1525:子串逆序打印(2012年Google校园招聘笔试题目)
2015-05-07 17:16
375 查看
题目1525:子串逆序打印
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:2629
解决:431
题目描述:
小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为1个。
输入:
输入包含多个测试用例,每个测试用例的第一行是一个正整数 n,1=<n<=100000,代表卡片上字符串的长度。第二行输入长度为n的字符串(字符串仅包含小写字母和空格)。当n为0时,代表输入结束。
输出:
对应每个测试用例,请按照要求输出修正过的字符串。
样例输入:
样例输出:
来源:2012年Google校园招聘笔试题目 这道题我的思路是,从前往后,循环一遍,因为要考虑在字符串前面和后面有空格的情况,还有全是空格的情况,所以在开始时,我先将这两种情况判断下看有没,将str_start,str_end定位到前面真正开始的时候和后面真正结束的时候,,然后依次在这两个范围内循环,当遇到空格而前面不为空格是,从这点往后循环的压到另外一个string中(这里设置标志flag来判断)最后不晓得为啥在那个九度上没有AC,见鬼了
时间限制:1 秒
内存限制:128 兆
特殊判题:否
提交:2629
解决:431
题目描述:
小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串的每个子串都打印反了,现在麻烦你帮小明将这些字符串中的子串修正过来,同时为了使卡片美观,压缩其中的连续空格为1个。
输入:
输入包含多个测试用例,每个测试用例的第一行是一个正整数 n,1=<n<=100000,代表卡片上字符串的长度。第二行输入长度为n的字符串(字符串仅包含小写字母和空格)。当n为0时,代表输入结束。
输出:
对应每个测试用例,请按照要求输出修正过的字符串。
样例输入:
3 abc 13 abc efg hij
样例输出:
cba cba gfe jih
来源:2012年Google校园招聘笔试题目 这道题我的思路是,从前往后,循环一遍,因为要考虑在字符串前面和后面有空格的情况,还有全是空格的情况,所以在开始时,我先将这两种情况判断下看有没,将str_start,str_end定位到前面真正开始的时候和后面真正结束的时候,,然后依次在这两个范围内循环,当遇到空格而前面不为空格是,从这点往后循环的压到另外一个string中(这里设置标志flag来判断)最后不晓得为啥在那个九度上没有AC,见鬼了
#include<iostream> #include <string> #include <stack> #include <vector> using namespace std; string reverse_string(string& str) { string last;//最终的结果 int str_len=str.size();//字符数组长度 int str_start=0;//开始位置 int str_end=str_len-1;//终止位置 int flag=0;//作为标志 int low=0; int high; if(str[0]==' ') { int F_flag=0; for(int i=0;i<str_len;i++) if(str[i]!=' ') { F_flag=1; str_start=i; low=str_start; last.push_back(' '); break; } if(F_flag==0) { last.push_back(' '); return last; } } if(str[str_len-1]==' ') { for(int i=str_len-1;i>=0;i--) if(str[i]!=' ') { str_end=i; break; } } for(int i=str_start;i<=str_end;i++) { if(i==str_end) { high=i; for(int j=high;j>=low;j--) last.push_back(str[j]); break; } if(str[i]==' ') { if(flag==0) { high=i-1; for(int j=high;j>=low;j--) last.push_back(str[j]); last.push_back(' '); flag=1; low=i+1; } else low++; } else flag=0; } if(str_end<str_len-1) last.push_back(' '); return last; } int main() { int n; string str; while(cin>>n) { cin.sync(); if(n==0) return 1; getline(cin,str); cout<<reverse_string(str)<<endl; } /*string str=" ab cd "; string str=" abfs usg fggg "; string str1=reverse_string(str); cout<<str<<endl; cout<<str1<<endl;*/ }
相关文章推荐
- 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目
- 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目
- AVL树(考研的同学需要注意其定义)的判定(某公司2012年校园招聘笔试题目)
- AVL树(考研的同学需要注意其定义)的判定(某公司2012年校园招聘笔试题目)
- 2012年Google校园招聘笔试最后一题
- 微软2016校园招聘4月在线笔试题目解析
- Google中国2014校园招聘笔试Round B China New Grad Test Problem E. Ignore all my comments
- 暴风影音2014校园招聘笔试题目-技术D卷
- Google中国2014校园招聘笔试Round B China New Grad Test Problem C. Hex
- 阿里巴巴2015年校园招聘笔试经历(题目与分析---倾情奉献)
- 阿里巴巴2014校园招聘笔试最后一道题目
- 暴风影音2018届校园招聘技术类笔试题目
- Google中国2014校园招聘笔试Round A China New Grad Test Problem B. Rational Number Tree
- 优酷土豆2014校园招聘笔试题目之Java开发类
- 华为校园招聘笔试题(机考题目)
- Google中国2014校园招聘笔试Round B China New Grad Test Problem B. Meet and party
- Google中国2015校园招聘笔试Round D APAC Test Problem D. Itz Chess
- 微软2015校园招聘 技术类职位在线笔试-题目1 : Browser Caching
- 2014腾讯校园招聘实习笔试题目西安站
- 腾讯2013年校园招聘笔试,其中的两道关于fork()的题目