学些网站制作,商检报关网站建设,英文网站网站建设,wordpress 搭建菜鸟刷题Day2
一.判定是否为字符重排#xff1a;字符重排
描述 给定两个由小写字母组成的字符串 s1 和 s2#xff0c;请编写一个程序#xff0c;确定其中一个字符串的字符重新排列后#xff0c;能否变成另一个字符串。 解题思路#xff1a; 这题思路与昨天最后两道类似字符重排
描述 给定两个由小写字母组成的字符串 s1 和 s2请编写一个程序确定其中一个字符串的字符重新排列后能否变成另一个字符串。 解题思路 这题思路与昨天最后两道类似可以给定两个数组将字符的内容加载到数组中最后判断两个数组内容是否相同即可。
bool CheckPermutation(char* s1, char* s2){ char arr1[256]{\0};char arr2[256]{\0};int sz1strlen(s1);int sz2strlen(s2);if(sz1!sz2) //长度不相同肯定不一样return false; while(*s1!\0*s2!\0){arr1[*s1]1;arr2[*s2]1;s1;s2;}
//数据录入完毕开始判断呗for(int i0;i256;i){if(arr1[i]!arr2[i])return false;}return true;
}二.回文排列:回文排列
描述 给定一个字符串编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 解题思路 基数排序的思想是真的好用所谓回文串其实也是一种堆成图形也就是说除了对称线上的那个字符以外其他的字符至少要出现两次并且是偶数次。如果有超过一个字符只出现了一次或者奇数次那么这个字符串一定无法组成回文串。
bool canPermutePalindrome(char* s)
{int arr[256]{0};//给的测试用例字符串很长用char会溢出int szstrlen(s);while(*s!\0){arr[*s]1;s;}int count0;for(int i0;i256;i){if(arr[i]%21)//既判断出现1一次又判断奇数次count;if(count1)return false;}return true;
}三.单词缩写:单词缩写
描述 在日常书面表达中我们经常会碰到很长的单词比如localization、“internationalization等。为了书写方便我们会将太长的单词进行缩写。这里进行如下定义 如果一个单词包含的字符个数达到或者超过10则我们认为它是一个长单词。所有的长单词都需要进行缩写缩写的方法是先写下这个单词的首尾字符然后再在首尾字符中间写上这个单词去掉首尾字符后所包含的字符个数。比如localization缩写后得到的是l10n”“internationalization缩写后得到的是i18n”。现给出n个单词将其中的长单词进行缩写其余的按原样输出。 解题思路 这个就中规中矩了将输入的字符串用一个数组存储起来方便拿到首字符和尾字符。还要对长度判断如果这个字符串长度不超过十就直接返回原字符。超过十只要在输出上稍作文章就行。
#includestdio.h
#includestring.hint main()
{int n0;char arr[101]{0while(scanf(%d,n)!EOF){scanf(%s,arr);int lenstrlen(arr);if(len10){printf(%s\n,arr);}else{printf(%c%d%c\n,arr[0],len-2,arr[len-1]);}}
}四.URL化URL化
描述 URL化。编写一种方法将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符并且知道字符串的“真实”长度。注用Java实现的话请使用字符数组实现以便直接在数组上操作。 解题思路 最常规的办法是遍历如果遇到空格就把空格后面的数据全部往后挪出三个空间然后插入20。但是这样效率实在是太低因为本身遍历就需要N次如果全是空格那么每次插入都要挪动。 更好的办法是先遍历得到空格次数然后使用双指针思想从后往前逐字符插入。
char *replaceSpaces(char *S,int length)
{int count0;for(int ilength-1;i0;i--){if(S[i] )count;//统计空格的个数}int r_endlengthcount*2;//实际所需数组空间的长度int c_endlength-1;//字符串的末尾S[r_end--]\0;//先设置字符串结尾标志while(c_end0){//从后往前开始遍历替换if(S[c_end] ){//当前字符是空格则向末尾添加%20S[r_end--]0;S[r_end--]2;S[r_end--]%;c_end--;continue;}S[r_end--]S[c_end--];//当前是非空格则直接赋值即可}
return S;
}但是作为一个刚刚手搓完string的博主这里还可以提供一种使用C中的string来解决的办法。 新建一个string对象如果遇到空格就20不是空格就直接该字符。这里也可以印证我在string中说的比尾插和append好用
class Solution
{
public:string replaceSpaces(string S, int length) {string copy;for(int i0;ilength;i){if(S[i] ){copy%20;}else{copyS[i];}}coutcopyendl;return copy;}
}OK那么以上就是今天的题目啦。人们总是容易高估短期努力能带来的提升却低估长期坚持能带来的改变。那么你坚持了吗