JD_题目1525:子串逆序打印(2012年Google校园招聘笔试题目)

 

 

题目1525:子串逆序打印

时间限制: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;*/

}

  

你可能感兴趣的:(Google)