当前位置: 首页 > news >正文

算法通过村第十二关-字符串|白银笔记|经典面试题

文章目录

  • 前言
  • 1. 反转问题
    • 1.1 反转字符串
    • 1.2 k个一组反转
    • 1.3 仅仅反转字母
      • 1.3.1 采用栈实现操作
      • 1.3.2 采用双指针实现操作
    • 1.4 反转字符串里面的单词
      • 1.4.1 使用语言提供的方法来解决(内置API)
      • 1.4.2 如何优雅自己实现上述功能
  • 2. 验证回文串
  • 3. 字符串中的第一个唯一字符
  • 4. 判断是否互为字符重排
      • 4.1 排序重组
      • 4.2 采用Hash实现操作
  • 总结


前言


提示:越是在意的人,越是绝口不提。我选择你,做内心深处的秘密。来日有人剖开这颗心来,里面除了你,什么都没有。 --陶立夏《生活的比喻》

本章挑战的难度不大,是大量字符串题目的基础。务必学扎实。

1. 反转问题

我们知道反转是链表的一个重要考点,反转同样也是字符串的一个重要问题。常见的也就是如下这些:

推荐题目⭐⭐⭐⭐⭐:

344. 反转字符串 - 力扣(LeetCode)

541. 反转字符串 II - 力扣(LeetCode)

917. 仅仅反转字母 - 力扣(LeetCode)

151. 反转字符串中的单词 - 力扣(LeetCode)

557. 反转字符串中的单词 III - 力扣(LeetCode)

这些题目你是否看出一些规律在其中,要么反转字符串,要么反转里面的单词。针对字符的反转可以变换造出很多题目来。这里我们据从基本出发,逐个击破。

1.1 反转字符串

参考题目介绍:344. 反转字符串 - 力扣(LeetCode)

在这里插入图片描述
在这里插入图片描述
这是最基本的反转题,也是最简单的问题。这里使用双指针最直接。具体的做法是:

对于一个长度为N的待反转的字符串数组,我们观察反转前后的下标的变化,就可以知道结果

s[0]   s[N - 1]
s[1]   s[N - 2]
s[2]   s[N - 3]
s[3]   s[N - 4]
s[4]   s[N - 5]
...    ...s[n - 1]   s[0]

比较完之后我们可以发现规律:即s[i] 与 s[N - 1 -i] 发生了交换。所以双指针我们就可以这样写:

  • 将left指向字符串数组的首元素,right指向字符串数组的尾元素
  • 当left < right:
    • 交换s[left] 和 s[right]
    • left 指针右移一位,即left = left + 1
    • right指针左移一位,即right = tight -1
  • 当left >= right ,反转结束,返回字符数组即可
    /*** 反转字符串(双指针)* @param s the string */public static void reverseString(char[] s) {int n = s.length;for(int left = 0,right = n - 1; left < right; left++,right--){char c = s[left];s[left] = s[right];s[right] = c;}}

1.2 k个一组反转

参考题目介绍:541. 反转字符串 II - 力扣(LeetCode)

在这里插入图片描述
在这里插入图片描述
怎么感觉这题在找事呢?确实是闲了。这里我们根据题意直接模拟结果:

反转每个下标从2k的倍数开始,长度为k的字串。如果字串长度不足k则反转整个字串。

/*** 反转k个字符串* @param s* @param k* @return*/public static String reverseStr(String s, int k) {if(s == null || s.length=0){return new String();}int n = s.length();char[] chars = s.toCharArray();for(int i = 0; i < n; i += 2*k){reverse(chars,i,Math.min(k + i,n) -1);}return new String(chars);}public static void reverse(char[] arr, int left, int right) {while(left < right){char c = arr[left];arr[left] = arr[right];arr[right] = c;left++;right--;}}

1.3 仅仅反转字母

参考题目介绍:917. 仅仅反转字母 - 力扣(LeetCode)

在这里插入图片描述

在这里插入图片描述
这里第一眼的感觉是不是很复杂,但同样从两头向中间就可以了,但是问题‘-’不是均匀的有些麻烦,处理起来不容易就增加了难度。其实换一种思路就不同了,栈这个工具,对于反转来说非常好用。

1.3.1 采用栈实现操作

具体方法:

将s中的所有字母单独存放在栈中,所以出栈来说就是反序操作了(当然也可以用数组存并反序的)

然后遍历s的所有字符,如果是字母就输出。

     /*** 仅仅反转字母* @param s the string to reverse* @return*/public static String reverseOnlyLetters(String s) {// 校验参数if (s == null || s.length() == 0) {return s;}// 创建一个栈作存储单词Stack<Character> letters = new Stack<Character>();for (Character c : s.toCharArray()){if (Character.isLetter(c)){letters.push(c);}}StringBuilder res = new StringBuilder();for (Character c : s.toCharArray()){if (Character.isLetter(c)){res.append(letters.pop());}else{res.append(c);}}return res.toString();}

1.3.2 采用双指针实现操作

一个接一个输出s的所有字符,当遇到一个字母时,我们希望找到逆序遍历字符串的下一个字母。

所以我们这么做:维护一个指针j从后向前遍历字符串,当需要字母的时候就使用它。

    /*** 进反转字母(双指针实现)* @param s the string to reverse* @return*/public static String reverseOnlyLetters2(String s) {// 校验参数if (s == null || s.length() == 0) {return s;}StringBuilder res = new StringBuilder();int j = s.length() - 1;for(int i = 0; i < s.length(); i++) {if (Character.isLetter(s.charAt(i))){// 可能不止一个while(!Character.isLetter(s.charAt(j))){j--;}res.append(s.charAt(j--));}else{res.append(s.charAt(i));}}return   res.toString();}

1.4 反转字符串里面的单词

参考题目介绍:151. 反转字符串中的单词 - 力扣(LeetCode)

在这里插入图片描述
在这里插入图片描述
这个题目经常在很多面试题中见到,这样的题目重点在如何处理单词,其实难度并不大,我们重点看下分析:

1.4.1 使用语言提供的方法来解决(内置API)

比如Java,Python,C++等很多语言提供了相关的特性,因此我们可以首先使用语言的特性来解决:

很多语言对字符串都有特殊的处理,提供了split(拆分),reverse(反转) 和 join(连续)等方法。一次采用内置的API是可行的。

  • 使用split将字符串按照空格分割成字符串数组;
  • 使用reverse将字符串数组进行反转;
  • 使用join方法将字符串重新拼接成一个字符串。

如图:

在这里插入图片描述

public String reverseWords(String s) {if(s == null || s.length() == 0){return s;}// 去除开头和结尾的空白字符,这个很重要s = s.trim();// 正则匹配连续的字符空白字符作为分隔符// 正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]List<String> wordList = Arrays.asList(s.split("\\s+"));Collections.reverse(wordList);return String.join(" ",wordList);
}

上面的方法,在面试中式禁止使用的,别想了,怎么会这么优雅呢,还是乖乖自己实现吧。

1.4.2 如何优雅自己实现上述功能

对于字符串可变的语言,就不需要在额外开辟空间了,直接在字符串上原地实现,这种情况下,反转字符和去除空格可以一起完成。

    /*** 反转字符串中的单词* @param s* @return*/public static String reverseWords(String s) {// 校验参数if(s == null || s.length() == 0) {return s;}// 出去多余空白字符StringBuilder sb = trimSpaces(s);// 反转字符串reverse(sb,0,sb.length() - 1);// 反转每个单词reverseWord(sb);return sb.toString();}private static void reverseWord(StringBuilder sb) {int n = sb.length();int start = 0, end = 0;while(start < n){// 循环到单词末尾while(end < n && sb.charAt(end) != ' '){++end;}// 反转单词reverse(sb,start,end - 1);// 更新start, 去寻找下一个单词start = end + 1;++end;}}/*** 反转字符出(可变)* @param sb* @param left* @param right*/private static void reverse(StringBuilder sb, int left, int right) {while (left < right){char temp = sb.charAt(left);sb.setCharAt(left++,sb.charAt(right));sb.setCharAt(right--,temp);}}private static StringBuilder trimSpaces(String s) {int left = 0,right = s.length() - 1;// 去除掉开头和结尾的空白字符while (left <= right && s.charAt(left) == ' ') {left++;}while (left <= right && s.charAt(right) == ' ') {right--;}// 将字符串间多余的空白符去掉StringBuilder sb = new StringBuilder();while(left <= right){char c = s.charAt(left);if (c != ' '){sb.append(c);}else  if (sb.charAt(sb.length() - 1) != ' '){sb.append(c);}left++;}return sb;}

2. 验证回文串

参考题目地址:125. 验证回文串 - 力扣(LeetCode)

在这里插入图片描述
在这里插入图片描述
回文问题再链表中也是常见的,再字符串中同样也是重点。(这里记录一下骨头哥☠️的经历技术面式:

第一就式写一个判断字符串回文的问题,题目本身很简单,双指针的典型问题。下面就会被加餐,找最长的回文串(这里就需要动态规划的思想了,这里我们后面再说))

说是话,刷了这么多题目,这个问题真的式手到擒来。有很多思路。最简单的方法就是对字符串进行一次遍历,并保留其中的字母和数字,放入另一个字符串sgood中。这样我们只需要判断sgood是不是一个普通的回文串了。

如果不是用语言的特性,这里我们可以使用双指针的思想来处理。

  • 初始,左右指针分别指向sgood的两侧
  • 不断向中间移动,判断是否相同,如果相遇就说明是回文串
     /*** 判断是否为回文字符串* @param s* @return*/public static boolean isPalindrome(String s) {if (s == null || s.length() == 0) {return true;}StringBuilder sgood = new StringBuilder();int len = s.length();for(int i = 0; i < len; i++) {char c = s.charAt(i);if (Character.isLetterOrDigit(c)) {sgood.append(Character.isLowerCase(c));}}int n = sgood.length();int left = 0,right = n - 1;while(left < right) {if (Character.toLowerCase(sgood.charAt(left)) != Character.toLowerCase(sgood.charAt(right))) {return false;}++left;--right;}return true;}

3. 字符串中的第一个唯一字符

参考题目地址:387. 字符串中的第一个唯一字符 - 力扣(LeetCode)

在这里插入图片描述

对于这个问题,最直观的方法就是遍历两次就可以知道结果,采用hash统计字符串中每个字符出现的次数。在第二次遍历时,就可以遍历到只出现1次的字符,直接返回他的索引即可,没有的话返回-1。

    /*** 找只出现一次的字符* @param s* @return*/public static int firstUniqChar(String s) {// 参数校验if(s == null || s.length() == 0){return 0;}Map<Character,Integer> frequency = new HashMap<Character,Integer>();for(int i = 0; i < s.length(); i++){char c = s.charAt(i);frequency.put(c,frequency.getOrDefault(c,0) + 1);}for(int i = 0; i < s.length(); i++){if (frequency.get(s.charAt(i)) == 1){return i;}}return -1;}

4. 判断是否互为字符重排

参考题目介绍:242. 有效的字母异位词 - 力扣(LeetCode)

在这里插入图片描述

这是一道简单题,就不要想的特别复杂啦。(当然这也是一道非常经典的题目)

这个题目来说,如果你觉得时排列组合的问题,还解决了,说明你排列组合学的很好。但是这里有更好的解法。

4.1 排序重组

将两个字符串全部从小到大或者从大到小排序,然后再逐个比较,不管原始字符串是什么,都可以判断出来,代码也不复杂。

      /*** 判断字符串是否重排* @param s1* @param s2* @return*/public static boolean checkPermutation1(String s1, String s2) {// 将字符串转成数组char[] chars1 = s1.toCharArray();char[] chars2 = s2.toCharArray();// 排序Arrays.sort(chars1);Arrays.sort(chars2);// 比较return new String(chars1).equals(new String(chars2));}

这里需要注意我们使用了内置api,面试是不允许的。

4.2 采用Hash实现操作

注意:这里我们不能简单的判断是否已经存在,因为字符串可能在某个串里面重复存在例如“abac”。所以我们可以记录出现的次数,如果一个字符串经过重新排列后,能变成另外一个字符串,那么他们每个不同字符出现的次数是相同的。例如:出现此处不同的,那么便是两个字符串不能够经过重新排列得到。

所以写起来页不复杂,但是长了些。

  /*** 判断字符串是否重排* @param s1* @param s2* @return*/public static boolean checkPermutation(String s1, String s2) {if(s1.length() != s2.length()){return false;}char[] chars = s1.toCharArray();Map<Character, Integer> s1Map = getMap(s1);Map<Character, Integer> s2Map = getMap(s2);for(Character c : chars){if(!s1Map.containsKey(c) || !s2Map.containsKey(c) || s1Map.get(c).intValue() != s2Map.get(c).intValue() ){return false;}}return  true;}/*** 统计指定字符串str中各字符的出现次数,并以Map的形式返回* @param str* @return*/public static Map<Character, Integer> getMap(String str) {Map<Character, Integer> map = new HashMap<>();char[] chars = str.toCharArray();for (char aChar : chars) {map.put(aChar, map.getOrDefault(aChar, 0) + 1);}return map;} 

总结

提示:字符串常见问题;双指针问题的回顾;反转问题;回文字符串;重排序问题。


如果有帮助到你,请给题解点个赞和收藏,让更多的人看到 ~ ("▔□▔)/

如有不理解的地方,欢迎你在评论区给我留言,我都会逐一回复 ~

也欢迎你 关注我 ,喜欢交朋友,喜欢一起探讨问题。
在这里插入图片描述

相关文章:

算法通过村第十二关-字符串|白银笔记|经典面试题

文章目录 前言1. 反转问题1.1 反转字符串1.2 k个一组反转1.3 仅仅反转字母1.3.1 采用栈实现操作1.3.2 采用双指针实现操作 1.4 反转字符串里面的单词1.4.1 使用语言提供的方法来解决(内置API)1.4.2 如何优雅自己实现上述功能 2. 验证回文串3. 字符串中的第一个唯一字符4. 判断是…...

《视觉 SLAM 十四讲》V2 第 5 讲 相机与图像

文章目录 相机 内参 && 外参5.1.2 畸变模型单目相机的成像过程5.1.3 双目相机模型5.1.4 RGB-D 相机模型 实践5.3.1 OpenCV 基础操作 【Code】OpenCV版本查看 5.3.2 图像去畸变 【Code】5.4.1 双目视觉 视差图 点云 【Code】5.4.2 RGB-D 点云 拼合成 地图【Code】 习题题…...

使用libmodbus库开发modbusTcp从站(支持多个主站连接)

使用libmodbus库开发modbusTcp从站&#xff08;支持多个主站连接&#xff09; Chapter1 使用libmodbus库开发modbusTcp从站(支持多个主站连接)rdsmodbusslave.hrdsmodbusslave.cppmain.cpp Chapter1 使用libmodbus库开发modbusTcp从站(支持多个主站连接) 参考链接&#xff1a…...

GPT系列论文解读:GPT-2

GPT系列 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一系列基于Transformer架构的预训练语言模型&#xff0c;由OpenAI开发。以下是GPT系列的主要模型&#xff1a; GPT&#xff1a;GPT-1是于2018年发布的第一个版本&#xff0c;它使用了12个Transformer…...

(四)激光线扫描-光平面标定

在上一章节,已经实现了对激光线条的中心线提取,并且在最开始已经实现了对相机的标定,那么相机标定的作用是什么呢? 就是将图像二维点和空间三维点之间进行互相转换。 1. 什么是光平面 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面,也叫光刀面,与物体相交…...

妙不可言的Python之旅----(二)

Python基础语法 什么是字面量 字面量&#xff1a;在代码中&#xff0c;被写下来的的固定的值&#xff0c;称之为字面量 常用的值类型 类型 描述 说明 数字&#xff08;Number&#xff09; 支持 • 整数&#xff08;int&#xff09; • 浮点数&#xff08;float&#xff…...

cartographer(1)-运行

1.下载数据集 #1.下载数据集&#xff1a; mkdir /home/tang/bagfiles#2.开始二维建图 cd /home/tang/carto_ws/cartographer_detailed_comments_ws/install_isolated/source install_isolated/setup.bash rospack profile #新装的包索引地址存在ros的环境里 roslaunch ca…...

C++:模板进阶与继承

模板进阶与继承 模板进阶1.非类型的模板参数2.模板的特化2.1特化的概念2.2函数模板特化2.3类模板特化2.4全特化和偏特化2.4.1全特化2.4.2偏特化 3.模板的分离编译3.1同文件分离3.2不同文件下分离 继承1.继承的概念和定义1.1继承的概念1.2继承的定义1.2.1定义格式1.2.2继承关系和…...

vue-img-cutter 实现图片裁剪[vue 组件库]

借助 vue-img-cutter 可以在网页端实现图片裁剪功能&#xff0c;最终功能效果如下&#xff1a; 组件 npm 安装 npm install vue-img-cutter2 --save-dev # for vue2 npm install vue-img-cutter3 --save-dev # for vue3vue-img-cutter使用 template模板标签模块&#xff0c…...

手把手教你从零开始腾讯云服务器部署(连接建站教程)

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com分享使用腾讯云服务器建站教程&#xff0c;…...

微信开放平台第三方开发,实现代小程序备案申请

大家好&#xff0c;我是小悟 微信小程序备案整体流程总共分为五个环节&#xff1a;备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前&#xff0c;需要确保小程序基本信息已填写完成、小程序至少存在一个…...

设计模式——11. 享元模式

1. 说明 享元模式(Flyweight Pattern)是一种结构型设计模式,它旨在减少系统中相似对象的内存占用或计算开销,通过共享相同的对象来达到节省资源的目的。 享元模式的核心思想是将对象的状态分为内部状态(Intrinsic State)和外部状态(Extrinsic State): 内部状态是对象…...

【LLM】主流大模型体验(文心一言 科大讯飞 字节豆包 百川 阿里通义千问 商汤商量)

note 智谱AI体验百度文心一言体验科大讯飞大模型体验字节豆包百川智能大模型阿里通义千问商汤商量简要分析&#xff1a;仅从测试“老婆饼为啥没有老婆”这个问题的结果来看&#xff0c;chatglm分点作答有条理&#xff08;但第三点略有逻辑问题&#xff09;&#xff1b;字节豆包…...

CSS小计

1&#xff1a;设置图片随窗缩放 使用百分比 width: 100%;height: 100%; 使用vmin: 将可视区域分为100vmin width: 100vmin;height: 100vmin; 2:设置字体颜色与背景色融合 mix-blend-mode: difference 3: 设置宽度自适应 width:fit-content 4:外边距合并 当两个相领的两个容…...

机器学习:决策树

决策树 决策树是一种基于树形结构的模型&#xff0c;决策树从根节点开始&#xff0c;一步步走到叶子节点&#xff08;决策&#xff09;&#xff0c;所有的数据最终都会落到叶子节点&#xff0c;既可以做分类也可以做回归。 特征选择 根节点的选择该用哪一个特征呢&#xff…...

xxl-job的原理(2)—调度中心管理注册信息

一、调度中心管理注册信息 1.JobApiController 执行器调用调度中心的url来实现注册、下线、回调等操作&#xff1b;其主要的实现类是JobApiController&#xff0c;调用/api/registry接口注册执行器信息&#xff0c;调用/api/registryRemove接口下线执行器信息&#xff0c;调用…...

小白入门pytorch(二)----神经网络

本文为&#x1f517;[小白入门Pytorch]学习记录博客 文章目录 前言一、神经网络的组成部分1.神经元2.神经网络层3.损失函数4.优化器 二、Pytorch构建神经网络中的网络层全连接层2.卷积层3.池化层4.循环神经网络5.转置卷积层6.归一化层7.激活函数层 三、数据加载与预处理1.数据加…...

【进阶C语言】排序函数(qsort)与模拟实现(回调函数的实例)

本章大致内容目录&#xff1a; 1.认识回调函数 2.排序函数qsort 3.模拟实现qsort 回调函数为C语言重要知识点&#xff0c;以函数指针为主要知识&#xff1b;下面介绍回调函数的定义、回调函数的库函数举例即库函数模拟实现。 一、回调函数 1.回调函数定义 回调函数就是一…...

CentOS 7 上编译和安装 SQLite 3.9.0

文章目录 可能报错分析详细安装过程 可能报错分析 报错如下&#xff1a; django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17). 原因&#xff1a;版本为3.7.太低了&#xff0c;需要升级到3.9.0至少 详细安装过程 1.安装所需的…...

[GXYCTF2019]禁止套娃 无回显 RCE 过滤__FILE__ dirname等

扫除git 通过githack 获取index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i, $_GET[exp])) {if(; preg_replace(/[a-z,_]\(…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...