笔试强训之每日一题
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔试强训之每日一题相关的知识,希望对你有一定的参考价值。
笔试强训之每日一题(八)
文章目录
单词缩写
题目描述
在日常书面表达中,我们经常会碰到很长的单词,比如"localization"、"internationalization"等。为了书写方便,我们会将太长的单词进行缩写。这里进行如下定义:
如果一个单词包含的字符个数达到或者超过10则我们认为它是一个长单词。所有的长单词都需要进行缩写,缩写的方法是先写下这个单词的首尾字符,然后再在首尾字符中间写上这个单词去掉首尾字符后所包含的字符个数。比如"localization"缩写后得到的是"l10n",“internationalization"缩写后得到的是"i18n”。现给出n个单词,将其中的长单词进行缩写,其余的按原样输出。
输入描述
第一行包含要给整数n。1≤n≤100
接下来n行每行包含一个由小写英文字符构成的字符串,字符串长度不超过100。
输出描述
按顺序输出处理后的每个单词。
示例1
输入:
4
word
localization
internationalization
pneumonoultramicroscopicsilicovolcanoconiosis
输出:
word
l10n
i18n
p43s
题目代码
#include<iostream>
#include<string>
using namespace std;
int main()
//个数达到或者超过10则
int n;
cin>>n;
string str;
while(n--)
cin>>str;
if(str.size()<10)
cout<<str<<endl;
else
cout<<str[0]<<str.size()-2<<str[str.size()-1]<<endl;
return 0;
URL化
题目描述
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
示例 1:
输入:"Mr John Smith ", 13
输出:"Mr%20John%20Smith"
示例 2:
输入:" ", 5
输出:"%20%20%20%20%20"
题目解析
虽然是替换问题,但是牛成的字符串整体变长了,因替换内容比被替换内容长,所以,一定涉及到字符串中字符的移动问题,移动方向一定是向后移动,所以现在的问题无非是移动多少的问题,因为是 ’ '替换成"%20",是1换3,所以可以先统计原字符串中空格的个数(设为n),然后可以计算出新字符串的长度,所以: new_length = old_length + 2n,最后,定义新老索引(或者指针),各自指向新老空间的结尾,然后进行old->new的移动′如果是空格,就连续放入“%20” ,其他平移即可。
题目代码
class Solution
public:
string replaceSpaces(string S, int length)
//先求出一共有多少个空格
int count = 0;
for(int i = 0;i < length;i++)
if(S[i] == ' ')
count++;
int new_length = length + count*2;
int new_index = new_length-1;
int old_index = length-1;
for(int i = old_index;i >= 0;i--)
if(S[i]!=' ')
S[new_index] = S[i];
new_index--;
else
S[new_index--] = '0';
S[new_index--] = '2';
S[new_index--] = '%';
S[new_length] = '\\0';
return S;
;
以上是关于笔试强训之每日一题的主要内容,如果未能解决你的问题,请参考以下文章