1. 题目(33)字母在字符串中的百分比
题目链接:字母在字符串中的百分比
给你一个字符串 s 和一个字符 letter ,返回在 s 中等于 letter 字符所占的 百分比 ,向下取整到最接近的百分比。
-
示例 1:
输入:s = “foobar”, letter = “o”
输出:33
解释:
等于字母 ‘o’ 的字符在 s 中占到的百分比是 2 / 6 * 100% = 33% ,向下取整,所以返回 33 。 -
示例 2:
输入:s = “jjjj”, letter = “k”
输出:0
解释:
等于字母 ‘k’ 的字符在 s 中占到的百分比是 0% ,所以返回 0 。
提示:
1 <= s.length <= 100
s 由小写英文字母组成
letter 是一个小写英文字母
2. 解题思路
将letter在s中出现的次数记录下来,然后通过计算算出百分比即可
3. 代码
int percentageLetter(char* s, char letter) {
size_t len=strlen(s);
double sum = 0;
for(int i=0;i<len;i++)
{
if(letter == s[i])
{
sum++;
}
}
return (int)(sum*100/len);
}
4. 题目(34)判断字符是否唯一
题目链接:判断字符是否唯一
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
-
示例 1:
输入: s = “leetcode”
输出: false -
示例 2:
输入: s = “abc”
输出: true
限制:
0 <= len(s) <= 100
s[i]仅包含小写字母
如果你不使用额外的数据结构,会很加分。
5. 解题思路
5.1 法一:
使用哈希表,遍历整个字符串,记录每个字母是否出现过
5.2 法二:
使用位运算,创建一个int类型的变量s,用s的二进制的每一位来记录出现过的字母
6. 代码
6.1 法一:
bool isUnique(char* astr){
bool arr[26]={0};
for(int i=0;astr[i]!='\0';i++)
{
if(arr[astr[i]-'a']==true)
{
return false;
}
else
arr[astr[i]-'a']=true;
}
return true;
}
6.2 法二:
bool isUnique(char* astr){
int i=0;//字符串下标
int s=0;
//s是int类型,它的二进制位数大于26(全部小写字母的个数)
//我们可以用它来记录每个字母出现的次数
int a=0;
while(astr[i])
{
a=1<<(astr[i]-'a');
//记录当前字母对应的位置
//判断当前位置是否被标记
if((a&s)==0)
s+=a;//标记当前位置
else
return false;
i++;
}
return true;
}
7. 题目(35)IP地址无效化
题目链接:IP地址无效化
给你一个有效的 IPv4 地址 address,返回这个 IP 地址的无效化版本。
所谓无效化 IP 地址,其实就是用 “[.]” 代替了每个 “.”。
-
示例 1:
输入:address = “1.1.1.1”
输出:“1[.]1[.]1[.]1” -
示例 2:
输入:address = “255.100.50.0”
输出:“255[.]100[.]50[.]0”
提示:
给出的 address 是一个有效的 IPv4 地址
8. 解题思路
首先要知道,一个IPv4中只有3个 “ . ”
根据题意,要把每个 " . “替换成” [.] ",相比较原来的字符串,在创建新的字符串时,还需要给新的字符串多分配 2*3 = 6的空间
分配好空间了,接下来就好办了,遍历整个字符串,
如果当前字符不是“ . ”,则直接放入新的字符串中
如果当前字符是“ . ”,则按顺序依次放入“ [ ”、“ . ”、“ ] ”
9. 代码
char * defangIPaddr(char * address){
int len = strlen(address);//注意strlen函数计算长度时没有把\0数进去
char* arr = (char*)malloc(len+6+1);
//在 len+6+1 中,“1” 是为字符'\0'开辟空间
char* p1 = arr;
//p1 的作用是记录新数组的最后一位
while(*address)
{
if('.' == *address)
{
*p1++ = '[';
*p1++ = '.';
*p1++ = ']';
}
else
{
*p1++ = *address;
}
address++;
}
*p1 = '\0';
//别忘了在字符串最后加上结束标志
return arr;
}