仅仅反转字母<难度系数⭐>| 字符串中第一个唯一字符<难度系数⭐>

举报
跳动的bit 发表于 2022/06/14 13:47:51 2022/06/14
【摘要】 1、仅仅反转字母<难度系数⭐>📝 题述:给你一个字符串 s ,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母 (小写或大写) 位置反转。返回反转后的 s 。💨示例1:输入:s = “ab-cd”输出:“dc-ba”💨示例2:输入:s = “a-bC-dEf-ghIj”输出:s = “a-bC-dEf-ghIj”💨示例3:输入:s = “Test1ng-Leet=...

1、仅仅反转字母<难度系数⭐>

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

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

返回反转后的 s 。

💨示例1:

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

💨示例2:

输入:s = “a-bC-dEf-ghIj”
输出:s = “a-bC-dEf-ghIj”

💨示例3:

输入:s = “Test1ng-Leet=code-Q!”
输出:“Qedo1ct-eeLg=ntse-T!”

⚠ 提示

  • 1 <= s.length <= 100
  • s 仅由 ASCII 值在范围 [33, 122] 的字符组成
  • s 不含 ‘"’ 或 ‘\’

🧷 平台:Visual studio 2017 && windows

🔑 核心思想:

  1. 这里利用快排的思想 —— 下标完成
  2. 逻辑不变 —— 将下标改造成迭代器

leetcode原题

1、

class Solution 
{
public:
    bool isLetter(char ch)//判断是否为字母,如果是返回treu,否则返回false
    {
        if(ch >= 'a' && ch <= 'z')
            return true;
        if(ch >= 'A' && ch <= 'Z')
            return true;
        return false;
    }
    string reverseOnlyLetters(string s) 
    {
        int begin = 0;
        int end = s.size() - 1;
        while(begin < end)
        {
            while(begin < end && !isLetter(s[begin]))//非英文字母,且保证最后begin和end重合
            {
                ++begin;
            }
            while(begin < end && !isLetter(s[end]))//非英文字母,且保证最后begin和end重合
            {
                --end;
            }
            swap(s[begin], s[end]);//交换
            //交换后还要调整
            ++begin;
            --end;
        }
        return s;
    }
};

2、

class Solution 
{
public:
    bool isLetter(char ch)//判断是否为字母,如果是返回treu,否则返回false
    {
        if(ch >= 'a' && ch <= 'z')
            return true;
        if(ch >= 'A' && ch <= 'Z')
            return true;
        return false;
    }
    string reverseOnlyLetters(string s) 
    {
        auto begin = s.begin();
        auto end = s.end() - 1;
        while(begin < end)
        {
            while(begin < end && !isLetter(*begin))//非英文字母,且保证最后begin和end重合
            {
                ++begin;
            }
            while(begin < end && !isLetter(*end))//非英文字母,且保证最后begin和end重合
            {
                --end;
            }
            swap(*begin, *end);//交换
            //交换后还要调整
            ++begin;
            --end;
        }
        return s;
    }
};

2、字符串中第一个唯一字符<难度系数⭐>

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

💨示例1:

输入:s = “leetcode”
输出:0

💨示例2:

输入: s = “loveleetcode”
输出: 2

💨示例3:

输入: s = “aabb”
输出: -1

⚠ 提示

  • 1 <= s.length <= 10^5^
  • s 只包含小写字母

🧷 平台:Visual studio 2017 && windows

🔑 核心思想:如果一个字符一个字符的去比较,效率很慢,最坏的情况是 O(N^2^),所以我们这里建立一个映射关系去统计次数,原理同计数排序

leetcode原题

class Solution 
{
public:
    int firstUniqChar(string s) 
    {
        int count[26] = {0};
        //统计每个字符出现的次数
        for(auto ch:s)
        {
           count[ch - 'a']++;
        }
        //找出字符串中第一个不重复的字符
        for(int i = 0; i < s.size(); ++i)
        {
            if(count[s[i] - 'a'] == 1)
            {
				return i;
            }
        }
        return -1;
    }
};
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。