学习笔记
主要内容包括html,css,html5,css3,JavaScript,正则表达式,函数,BOM,DOM,jQuery,AJAX,vue等等
HTML/CSS
**HTML:**HTML基本结构,标签属性,事件属性,文本标签,多媒体标签,列表 / 表格 / 表单标签,其他语义化标签,网页结构,模块划分
**CSS:**CSS代码语法,CSS 放置位置,CSS的继承,选择器的种类/优先级,背景样式,字体样式,文本属性,基本样式,样式重置,盒模型样式,浮动float,定位position,浏览器默认样式
HTML5 /CSS3
**HTML5:**HTML5 的优势,HTML5 废弃元素,HTML5 新增元素,HTML5 表单相关元素和属性
**CSS3:**CSS3 新增选择器,CSS3 新增属性,新增变形动画属性,3D变形属性,CSS3 的过渡属性,CSS3 的动画属性,CSS3 新增多列属性,CSS3新增单位,弹性盒模型
JavaScript
**JavaScript:**JavaScript基础,JavaScript数据类型,算术运算,强制转换,赋值运算,关系运算,逻辑运算,三元运算,分支循环,switch,while,do-while,for,break,continue,数组,数组方法,二维数组,字符串
字符串压缩
今天我们来讲解字符串问题,字符串问题是比较容易的类型,一般不会使用到复杂的算法。请大家与我一起开始我们的刷题之路吧!!!
字符串压缩
来看题目:
依据题目要求,我们必须编写一个函数,确保它能返回一个更为紧凑的字符数组:若压缩后的字符串长度小于原始字符串,则返回压缩后的字符串;反之,则返回原始字符串。本题的挑战核心在于如何有效地判定压缩是否导致了长度缩减,以及如何妥善地将处理后的数据填充进数组之中。接下来,我们将通过两种策略来攻克这一问题。
思路一(双指针顺畅版)
本思路一步一步操作,逐步完成任务
- 先确认字符串长度是否小于 2 ,小于直接返回(因为压缩字符串长度至少是2)
- 然后定义双指针和计数位
- 开始遍历 : *fast 与 *slow 不相等 则 fast向后移动
- 然后记录重复次数
- 重复次数分位数进入数组
- slow 到 fast 位置 , 计数归零
- 重复 3 - 6 直到遍历结束
char\* compressString(char\* S){
int len1 = strlen(S);
if(len1<=2) return S;
// 双指针
char\* slow = S;
char\* fast = S;
//记录次数 每个字母至少出现 1 次
int count = 1;
//开辟一个足够大的数组空间
char\* ret = (char\*)malloc(sizeof(char) \* 100001);
int i = 0;
//开始遍历
while(\*fast !='\0'){
//快指针 后移
fast = fast + 1;
//向后移动 直到不同
while(\*fast == \*slow){
fast++;
count++;
}
//计算位数 方便下面的赋值操作
int n = 0;
int num = count ;
while(num){
num /=10;
n++;
}
int n2 = n;
// ret 数组赋值
ret[i++] = \*slow;
while(n--) {
ret[i + n] = count % 10 + '0' ;
count /= 10;
}
// 下标后移
i += n2;
// 慢指针移动到快指针位置
slow = fast;
//计数重置
count = 1;
}
//结尾 ‘\0’不能忘记
ret[i] = '\0';
int len2 = strlen(ret);
//返回较小的 字符串
if(len2 < len1) return ret;
else return S;
}
思路二(sprintf函数巧解版)
上一步的写入计数的步骤十分繁琐,而使用sprintf函数可以巧妙化解这个问题
因为输入的数据都是 字符 + 数字
sprintf()
int sprintf ( char * str, const char * format, ... );
将格式化数据写入字符串
该函数将格式化文本组合成一个字符串,其内容与使用printf函数打印时完全一致,但并不直接输出,而是将内容存储在指向str的缓冲区中作为一个C语言风格的字符串。
请注意,缓冲区的大小应足够容纳生成的整个字符串(为了安全性考虑,请参阅snprintf函数获取更安全的版本)。
在内容后面,函数会自动附加一个终止空字符(null terminator)。
在format参数之后,函数期望至少有与format中所需数量相匹配的额外参数。
就是可以格式化写入数据
所以我们就可以进行下面的操作:
结束
一次完整的面试流程就是这样啦,小编综合了腾讯的面试题做了一份前端面试题PDF文档,里面有面试题的详细解析,分享给小伙伴们,有没有需要的小伙伴们都去领取!
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】