【题解】《算法零基础》第22讲:字符串算法(2):字符串比较
2023-09-27 14:29:25 时间
前言
原文请查看:《算法零基础100讲》字符串算法
目录
剑指 Offer 05. 替换空格
原题链接:剑指 Offer 05. 替换空格
分析
我的做法是先统计空格个数,再决定申请空间的大小。
然后遍历字符串,如果遇到空格,就将其替换。
代码
char* replaceSpace(char* s)
{
if(NULL == s) return NULL;
//统计空格个数
int count = 0;
for (int i = 0; i < strlen(s); ++i)
{
if (s[i] == ' ')
count++;
}
//申请新空间
char* ans = (char*)malloc(sizeof(char) * strlen(s) + count * 2 + 1);
int i = 0, j = 0;
for (i; i < strlen(s); ++i, ++j)
{
ans[j] = s[i];
if (s[i] == ' ')
{
ans[j++] = '%';
ans[j++] = '2';
ans[j] = '0';
}
}
ans[j] = '\0';
return ans;
}
面试题 10.05. 稀疏数组搜索
原题链接:面试题 10.05. 稀疏数组搜索
分析
遍历字符串数组,然后
直接使用库函数(滑稽)。。。
代码
int findString(char** words, int wordsSize, char* s)
{
for (int i = 0; i < wordsSize; ++i)
{
if (strcmp(s, words[i]) == 0)
{
return i;
}
}
return -1;
}
1309. 解码字母到整数映射
原题链接:1309. 解码字母到整数映射
分析
动态申请一个新的字符串,再声明一个表示下标的变量。
遍历原字符串,判断正在遍历的下标和字符串长度的关系,如果满足小于字符串长度,再判断该下标往后2个位置是否为 ‘#’,是的话就将其改为 " j~z";否则改成 " a ~ i"。。
代码
char * freqAlphabets(char * s)
{
char* str = (char*)malloc(sizeof(char) * strlen(s) + 1);
int strSize = 0;
for (int i = 0; i < strlen(s); ++i)
{
if (i + 2 < strlen(s) && s[i + 2] == '#')
{
str[strSize++] = ((s[i] - '0') * 10 + (s[i + 1] - '1') + 'a');
i += 2;
}
else
{
str[strSize++] = s[i] - '1' + 'a';
}
}
str[strSize] = '\0';
return str;
}
1967. 作为子字符串出现在单词中的字符串数目
分析
直接使用库函数 strstr
函数原型:
char* strstr(char* str1, char* str2);
意义:找出在字符串str1中 第一次出现字符串str2的位置(即str2如果是str1的子串),找到就返回该字符串位置的指针,不存在则返回 NULL。
代码
int numOfStrings(char ** patterns, int patternsSize, char * word)
{
int count = 0;
for (int i = 0; i < patternsSize; ++i)
{
if (strstr(word, patterns[i]))
{
count++;
}
}
return count;
}
练习题
原题链接:290. 单词规律
相关文章
- 基于麻雀算法优化的深度极限学习机DLM的预测算法(Matlab代码实现)
- 【数据结构与算法】排序算法的稳定性与冒泡排序的实现
- [2]十道算法题【Java实现】
- C语言算法:整数拆分问题(改进)
- 常用的排序算法和时间复杂度
- 推荐系统[八]算法实践总结V4:混排算法在淘宝信息流第四代混排调控框架实战,提升推荐实时性捕捉实时兴趣。
- 程序员必须知道的10大基础实用算法及其讲解
- 算法学习之基础题
- 《算法技术手册》一第3章 算法基础
- 《算法技术手册》一3.4.4 特殊值
- NLP自然语言处理系列-算法基础-数据结构-翻转二叉树 填充二叉树节点的右侧指针
- 【笔记】JavaScript版数据结构与算法——基础算法之“正则类”(459. 重复的子字符串)
- 【算法】数据结构与算法之美,解剖艺术
- 【算法】算法的艺术(二)
- C++排序算法冒泡排序&插入排序&选择排序&希尔排序算法
- 【算法】动态规划 ⑦ ( LeetCode 55. 跳跃游戏 | 算法分析 | 代码示例 )
- 【基础篇】4 # 链表(上):如何实现LRU缓存淘汰算法?
- 【算法基础】(二)数据结构 --- 单链表
- 【算法基础】(一)基础算法 ---高精度
- 数据结构与算法 | 【分治策略与递归】——求阶乘、整数数位输出、最大公约数(四种方法)
- 欧几里得算法&&扩展欧几里得算法(基础)
- UUID实现之一twitter的分布式自增IDsnowflake算法
- 【数据结构与算法分析】0基础带你学数据结构与算法分析10--树和森林
- 【数据结构与算法分析】0基础带你学数据结构与算法分析03--栈 (Stack)
- 让你一学就会的那些算法知识总结--基础算法 二分
- 【题解】《算法零基础》第21讲:字符串算法(1):字符串遍历
- 《算法零基础》第19讲:进制转换(1)入门
- 《算法零基础》第13讲:最大公约数
- 《算法零基础》第12讲:因子和【题解】
- python实现图的相关算法-左程云视频笔记-更新中