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

25.日常算法

1.仅仅反转字母

题目来源
给你一个字符串 s ,根据下述规则反转字符串:
所有非英文字母保留在原有位置。
所有英文字母(小写或大写)位置反转。
返回反转后的 s 。

示例 1:
输入:s = “ab-cd”
输出:“dc-ba”

class Solution {
public:
    string reverseOnlyLetters(string s) {
        int left = 0, right = s.size();
        while (left < right){
            if (!isalpha(s[left])){
                ++left;
                continue;
            }
            if (!isalpha(s[right])){
                --right;
                continue;
            }
            swap(s[left++], s[right--]);
        }
        return s;
    }
};

2. LCR 017. 最小覆盖子串

给定两个字符串 s 和 t 。返回 s 中包含 t 的所有字符的最短子字符串。如果 s 中不存在符合条件的子字符串,则返回空字符串 “” 。如果 s 中存在多个符合条件的子字符串,返回任意一个。
注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。

示例 1:
输入:s = “ADOBECODEBANC”, t = “ABC”
输出:“BANC”
解释:最短子字符串 “BANC” 包含了字符串 t 的所有字符 ‘A’、‘B’、‘C’

class Solution {
public:
    string minWindow(string s, string t) {
        unordered_map<char, int> hash;
        for (auto & c : t) hash[c]++;
        int count = 0;
        int left = 0, right = 0;
        string ret = "";
        int minlen = INT_MAX;
        while (right < s.size()){
            if (hash[s[right]] > 0)count++;
            // s中所有的元素都进行--操作
            hash[s[right]]--;
            if (count == t.size()){
                // 只要找到符合条件的,就只需要找到下一个t中有的元素即可,只要hash中值小于0
                // 就说明了是t中没有元素,要么就是t中多有的元素直接跳过
                while (left <= right && (count == t.size() || hash[s[left]] < 0)){
                    // 更新值
                    if (count == t.size() && right - left + 1 < minlen){
                        ret = s.substr(left, right - left + 1);
                        minlen = right - left + 1;
                    }
                    if (hash[s[left]] == 0) count--;
                    hash[s[left]]++;
                    ++left;
                }
            }
            ++right;
        }
        return ret;
    }
};

http://www.kler.cn/a/519528.html

相关文章:

  • Android WebView 中网页被劫持的原因及解决方案
  • 设计模式的艺术-代理模式
  • Transfoemr的解码器(Decoder)与分词技术
  • Linux进程概念:【环境变量】【程序地址空间】
  • 【Leetcode刷题记录】15.三数之和
  • leetcode_链表 876.链表的中间节点
  • Linux查看服务器的内外网地址
  • 【Linux网络编程】数据链路层--以太网协议
  • 回顾2024,展望2025
  • BGP边界网关协议(Border Gateway Protocol)路由聚合详解
  • Gradle buildSrc模块详解:集中管理构建逻辑的利器
  • PyTorch张量操作reshape view permute transpose
  • Uniapp开发总结
  • 【Linux】21.基础IO(3)
  • Soul App创始人张璐团队引领平台入选2024上海软件和信息技术服务业百强
  • YOLO目标检测3层
  • 存储过程优化实践:统一返回结构、参数 JSON 化与事务原子化
  • 开发环境搭建-3:配置 nodejs 开发环境 (fnm+ node + pnpm)
  • VMware虚拟机迁移到阿里云
  • 科技快讯 | 理想官宣:正式收费!WeChat 港币钱包拓宽商户网络;百川智能发布深度思考模型Baichuan-M1-preview
  • C# 多线程同步(Mutex | Semaphore)
  • firefox屏蔽debugger()
  • 简笔画生成smplx sketch2pose
  • java读取在resources目录下的文件内容
  • 《 C++ 点滴漫谈: 十四 》为什么说 #define 是 C++ 的潘多拉盒子?
  • 房租管理系统的智能化应用助推租赁行业高效运营与决策优化