题目描述:
去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。条件约束:
1,不考虑关键词起始和结束位置为空格的场景;
2,单词的的开始和结束下标保证涵盖一个完整的单词,即一个坐标对开始和结束下标之间不会有多余的空格;
3,如果有单引号,则用例保证单引号成对出现;
4,关键词可能会重复;
5,文本字符长度length取值范围:[0, 100000];
输入描述:
输入为两行字符串:
第一行:待去除多余空格的文本,用例保证如果有单引号,则单引号成对出现,且单引号可能有多对。
第二行:关键词的开始和结束坐标,关键词间以逗号区分,关键词内的开始和结束位置以单空格区分。
例如:
Life is painting a picture, not doing 'a sum'.
8 15,20 26,43 45
关键单词为:painting picture sum
输出描述:
输出为两行字符串:
第一行:去除多余空格后的文本
第二行:去除多余空格后的关键词的坐标开始和结束位置,为数组方式输出。
例如:
Life is painting a picture, not doing 'a sum'.
[8, 15][19, 25][42, 44]
补充说明:
收起
示例1
输入:
Life is painting a picture, not doing 'a sum'.
8 15,20 26,43 45
输出:
Life is painting a picture, not doing 'a sum'.
[8, 15][19, 25][42, 44]
说明:
a和picture中间多余的空格进行删除
示例2
输入:
Life is painting a picture, not doing 'a sum'.
8 15,19 25,42 44
输出:
Life is painting a picture, not doing 'a sum'.
[8, 15][19, 25][42, 44]
说明:
a和sum之间有多余的空格,但是因为有成对单引号,不去除多余空格
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int sz=1e5+10;
char s[sz];
int len=0;
string ss;
string ans;
bool cmp(pair<int,int> a,pair<int,int> b)
{
return a.first<b.first;
}
int main()
{
char now=getchar();
while(now!='\n')
{
s[len++]=now;
now=getchar();
}
now = getchar();
while(now!='\n')
{
ss+=now;
now=getchar();
}
vector<pair<int,int>> a;
int x=0;
pair<int,int> tmp;
for(auto c:ss)
{
if(c==' '){
tmp.first=x;
x=0;
}
if(c==','){
tmp.second=x;
a.push_back(tmp);
x=0;
}
if(c>='0'&&c<='9')
{
x=x*10+c-'0';
}
}
tmp.second=x;
a.push_back(tmp);
//sort(a.begin(),a.end(),cmp);
//auto lens = unique(a.begin(),a.end())-a.begin();
int dif = 0;
int noww=0;
bool space = 0;
bool mark = 0;
for(int i = 0;i<len;i++)
{
for(int j=0;j<a.size();j++)
{
if(a[j].first==i)
{
a[j].first-=dif;
a[j].second-=dif;
}
}
if(s[i]=='\'')
{
if(!mark)mark = 1;
else mark = 0;
ans+=s[i];
continue;
}
else if(s[i]==' ')
{
if(mark)
{
ans+=s[i];
continue;
}
if(space)dif++;
else
{
space = 1;
ans+=s[i];
}
}
else{
ans+=s[i];
space = 0;
}
}
cout<<ans<<endl;
for(int i=0;i<a.size();i++)
{
pair<int,int> pa=a[i];
printf("[%d, %d]",pa.first,pa.second);
}
}