目录
总结:
头文件:
前三个函数来自于<string.h>
malloc来自于<stdlib.h>
函数:
strcmp(s1,s2);
用来比较字符串,s1大于s2时返回大于0的数。(同理,相同的话就等于0,小于的话就小于0。)
strlen(s1);
用来获得字符串的长度。
strcpy(s1,s2);
将字符串s2的内容复制给s1。
s1=(char*)malloc(n);
用来给s1这个字符串n位内存空间。
内容:
今天看见了一道题,题目如下。
3216. 交换后字典序最小的字符串
简单
提示
给你一个仅由数字组成的字符串 s,在最多交换一次 相邻 且具有相同 奇偶性 的数字后,返回可以得到的
字典序最小的字符串
。
如果两个数字都是奇数或都是偶数,则它们具有相同的奇偶性。例如,5 和 9、2 和 4 奇偶性相同,而 6 和 9 奇偶性不同。
示例 1:
输入: s = "45320"
输出: "43520"
解释:
s[1] == '5' 和 s[2] == '3' 都具有相同的奇偶性,交换它们可以得到字典序最小的字符串。
示例 2:
输入: s = "001"
输出: "001"
解释:
无需进行交换,因为 s 已经是字典序最小的。
其中"字典序"我不知道是啥。
我认为字典序就是你查字典的时候,不同字在字典里的排序。例如用拼音查字法里的pa的字典序就比pi要靠前(也就是小。)。
接下来说说我的解题思路。
我的思路是穷举,通过获得全部的结果,然后比大小,将最小的结果返回回去就可以了。
这里用到的关键函数是strcmp,它用来进行比较字符串大小的操作。
我的答案如下。
char* getSmallestString(char* s) {
int len=strlen(s);//获取字符串长度
if(len<2)
{
return s;
}
int i=0;
char* r1;
r1 = (char *)malloc(sizeof(char)*(len+1));
strcpy(r1,s);
char* r2;
r2 = (char *)malloc(sizeof(char)*(len+1));
for(i=0;(i+1)<=(len-1);i++)
{
int num1 = s[i]-'0';
int num2 = s[i+1]-'0';
char temp;
if ((num1%2==num2%2))
{
strcpy(r2,s);
r2[i+1]=s[i];
r2[i]=s[i+1];
if(strcmp(r2,r1)<0)
{
strcpy(r1,r2);
}
}
}
return r1;
}