【刷题】 leetcode 面试题 01,前端最新大厂面试真题总结

86 阅读5分钟

学习笔记

主要内容包括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,数组,数组方法,二维数组,字符串

开源分享:docs.qq.com/doc/DSmRnRG…

在这里插入图片描述

字符串压缩

今天我们来讲解字符串问题,字符串问题是比较容易的类型,一般不会使用到复杂的算法。请大家与我一起开始我们的刷题之路吧!!!

字符串压缩

在这里插入图片描述
来看题目:
依据题目要求,我们必须编写一个函数,确保它能返回一个更为紧凑的字符数组:若压缩后的字符串长度小于原始字符串,则返回压缩后的字符串;反之,则返回原始字符串。本题的挑战核心在于如何有效地判定压缩是否导致了长度缩减,以及如何妥善地将处理后的数据填充进数组之中。接下来,我们将通过两种策略来攻克这一问题。

思路一(双指针顺畅版)

本思路一步一步操作,逐步完成任务

  1. 先确认字符串长度是否小于 2 ,小于直接返回(因为压缩字符串长度至少是2
  2. 然后定义双指针和计数位
  3. 开始遍历 : *fast 与 *slow 不相等 则 fast向后移动
  4. 然后记录重复次数
  5. 重复次数分位数进入数组
  6. slow 到 fast 位置 , 计数归零
  7. 重复 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文档,里面有面试题的详细解析,分享给小伙伴们,有没有需要的小伙伴们都去领取!

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】