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

Leetcode刷题营:字符串相关--第35,36题

往期刷题营回顾

        Leetcode刷题营第三十四题:平衡二叉树

        Leetcode刷题营第三十三题:对称二叉树

        Leetcode刷题营第三十三题:另一个树的子树

917. 仅仅反转字母

给你一个字符串 s ,根据下述规则反转字符串:

  • 所有非英文字母保留在原有位置。
  • 所有英文字母(小写或大写)位置反转。

返回反转后的 s 。

示例 1:

输入:s = "ab-cd"
输出:"dc-ba"

    示例 2:

    输入:s = "a-bC-dEf-ghIj"
    输出:"j-Ih-gfE-dCba"
    

      示例 3:

      输入:s = "Test1ng-Leet=code-Q!"
      输出:"Qedo1ct-eeLg=ntse-T!"提示
      • 1 <= s.length <= 100
      • s 仅由 ASCII 值在范围 [33, 122] 的字符组成
      • s 不含 '\"' 或 '\\'

      算法思路一:双指针遍历

              一个从左向右,一个从右向左,直到两指针相遇停止。

      代码实现

      #include<assert.h>
      #include<string.h>
      #include<ctype.h>
      char* reverseOnlyLetters(char* pc){assert(pc);int len = strlen(pc);int left = 0;int right = len-1;while(left<right){if(!isalpha((unsigned char)pc[left]) && isalpha((unsigned char)pc[right])){left++;}   else if(!isalpha((unsigned char)pc[right]) && isalpha((unsigned char)pc[left])){right--;}else if(!isalpha((unsigned char)pc[right]) && !isalpha((unsigned char)pc[left])){right--;left++;}else{char tmp = pc[left];pc[left] = pc[right];pc[right] = tmp;right--;left++;}}return pc;
      }

      简化之后的代码:

      #include <assert.h>
      #include <string.h>
      #include <ctype.h>char* reverseOnlyLetters(char* pc) {assert(pc);int left = 0, right = strlen(pc) - 1;while (left < right) {if (!isalpha((unsigned char)pc[left])) {left++;} else if (!isalpha((unsigned char)pc[right])) {right--;} else { // 两边都是字母char tmp = pc[left];pc[left++] = pc[right];pc[right--] = tmp;}}return pc;
      }

      算法思路2: 利用c++的string遍历

              参考:String类(续)

      代码实现:

      bool isalpha(char ch){if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')){return true;}return false;
      }class Solution {
      public:string reverseOnlyLetters(string s) {int  right = s.size()-1;int  left = 0;while(left<right){if(!isalpha(s[right])){right--;}else if(!isalpha(s[left])){left++;}else{char tmp = s[left];s[left] = s[right];s[right] = tmp;left++;right--;}}return s;}
      };

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

      给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

      示例 1:

      输入: s = "leetcode"
      输出: 0
      

      示例 2:

      输入: s = "loveleetcode"
      输出: 2
      

      示例 3:

      输入: s = "aabb"
      输出: -1
      

      提示:

      • 1 <= s.length <= 105
      • s 只包含小写字母

      算法思路一:双指针遍历


      代码实现:

      class Solution {
      public:int firstUniqChar(string s) {int size = s.size();int This = 0;int target =0;while(target<size){char ch = s[target];This = 0;int flag = 0;while(This < size){if(s[This] == ch && This != target){flag = 1;break;}This++;}if(flag == 0){return target;}target++;}return -1;}
      };

      算法思路二:

              利用类似计数排序的思想-->统计出现的次数来判断哪些字符出现了几次?(这里只有小写字母出现

      参考链接:非比较排序--计数排序

      代码实现:

      class Solution {
      public:int firstUniqChar(string s) {int count[26]={0};int size = s.size();for(auto ch : s){count[ch - 'a']++;};for(int i = 0;i<size;i++){if(count[s[i]-'a'] == 1){return i;}}return -1;}
      };

      http://www.dtcms.com/a/318631.html

      相关文章:

    1. 深度探索:非静态内部类不能定义 static 成员属性和方法 及 静态内部类的必要性
    2. 若依前后端分离版学习笔记(六)——JWT
    3. K8S、Docker安全漏洞靶场
    4. Go语言“fmt”包详解
    5. KNN算法:从原理到实战应用
    6. SDIO三种触发枚举的方式
    7. Python高级排序技术:非原生可比对象的自定义排序策略详解
    8. 第14届蓝桥杯Scratch选拔赛初级及中级(STEMA)真题2022年11月27日
    9. Java面试宝典:类加载器分层设计与核心机制解析
    10. 栈与队列的基本逻辑
    11. ToonMe:将照片转换为卡通风格的艺术作品
    12. docker run 入门到进阶:容器启动背后的门道
    13. 嵌入式开发入门—电感器
    14. CASA模型原理详细解析
    15. 【unity 中的RectTransform组件中的`RectTransform.sizeDelta理解】
    16. Unity3D水下场景与游泳系统开发指南
    17. ubuntu18.04在fstab文件中挂载硬盘失败,系统进入紧急模式的解决方法
    18. js 从 json 中取 key 的值
    19. 云平台托管集群:EKS、GKE、AKS 深度解析与选型指南-第一章
    20. 磁悬浮转子变转速工况下的振动抑制全解析
    21. 什么是「回调函数」 Callback Function ?
    22. Linux(17)——Linux进程信号(上)
    23. 28.(vue3.x+vite)el-pagination中文设置(兼容其他elementPlus组件)
    24. PaddleOCR 多线程并发问题
    25. K8S命令记录
    26. 利用多线程设计群ping工具
    27. 5G随身WiFi怎么选?实测延迟/网速/续航,中兴V50适合商务,格行MT700适合短租、户外党~避坑指南+适用场景全解析
    28. 无监督学习之K-means算法
    29. 古多倍体化对被子植物适应性进化的遗传贡献--文献精度154
    30. 本地部署 SQLite 数据库管理工具 SQLite Browser ( Web ) 并实现外部访问