算法通关村第十二关-字符串基础题目

这篇具有很好参考价值的文章主要介绍了算法通关村第十二关-字符串基础题目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

反转字符串

思路:遍历字符串,将第i个字符和第N-i-1个字符串交换即可;
代码实现:

#include <iostream>
#include <string>
using namespace std;

// 反转字符串
string reserveString(string str)
{
    if (str.size() == 0 || str.size() == 1)
    {
        return str;
    }

    string res = str;
    // 使用双指针交换指向的数值
    int left = 0;
    int right = str.size() - 1;
    while (left < right)
    {
        char temp = res[left];
        res[left] = res[right];
        res[right] = temp;
        right--;
        left++;
    }
    return res;
}
int main()
{
    // 反转字符串
    string s = "hello world!";
    string r = reserveString(s);
    cout << r << endl;
    return 0;
}

K组反转字符串

题目:反转字符串2

思路:每2k个一组,将其前k个字符反转,使用i+k与字符串长度n判断剩余字符串长度属于(0,k)还是 [k,2k)之间;然后按照要求剩余字符串即可;

代码实现:文章来源地址https://www.toymoban.com/news/detail-815196.html

#include <iostream>
#include <string>
using namespace std;

void reverse(string &s, int left, int right)
{
    while (left < right)
    {
        char temp = s[left];
        s[left] = s[right];
        s[right] = temp;
        right--;
        left++;
    }
}
// K组一个反转字符串
void resverseKString(string &s, int k)
{
    for (int i = 0; i < s.size(); i += 2 * k)
    {
        int left = i;
        int right;
        if (i + k <= s.size())
        {
            // 剩余字符个数在[k,2k)之间
            right = i + k - 1;
        }
        else if (i + k > s.size())
        {
            // 剩余字符个数小于k个
            right = s.size() - 1;
        }
        reverse(s, left, right);
    }
}

int main()
{
    //K组反转字符
    string s1 = "abcdefg";
    resverseKString(s1,2);
    cout << s1 << endl;
    return 0;
}

仅反转字符串中的字母

题目:仅仅反转字母

思路:
1、定义左右指针分别指向字符串字符串的头部和尾部;
2、持续向右移动左指针,直到找到第一个字母;
3、持续向左移动右指针,直到找到第一个字母;
4、交换左右指针指向的字符;
5、循环1,2,3 步骤,直到左指针大于等于右指针;

代码实现:

#include <iostream>
#include <string>
using namespace std;
//仅仅反转字母
void reverseChar(string &s)
{
    int left = 0;
    int right = s.size()-1;

    while(left < right)
    {
        while(!isalpha(s[left]))//isalpha()函数判断当前字符是否是字母
        {
            left++;
        }

        while(!isalpha(s[right]))
        {
            right--;
        }

        char temp = s[left];
        s[left] = s[right];
        s[right] = temp;
        right--;
        left++;
    }
}
int main()
{
    //仅仅反转字母
    string s2 = "a-bC-dEf-ghIj";
    reverseChar(s2);
    cout << s2 << endl;
    return 0;
}

验证回文字符串

题目:验证回文字符串

思路:
1、将字符串中字母和数字取出组成待判断的字符串,由于不区分大小写,因此将遇到的字母全部转换为大写/小写;
2、定义左右指针分别指向字符串字符串的头部和尾部;
3、判断左右指针指向的字符是否相等,如果相等,移动指针继续判断;如果不相等,不是回文字符串,直接返回false;

代码实现:

#include <iostream>
#include <string>
using namespace std;
//验证回文字符串
bool isPalidrome(string s)
{
    bool res = true;
    //统计字符串中的所有字母数字 不区分大小写,所以将所有字母保存为小写
    string str = "";
    for(auto a : s)
    {
        if(isalnum(a))
        {
            str += tolower(a);
        }
    }

    int left = 0;
    int right = str.size()-1;
    while(left < right)
    {
        if(str[left] != str[right])
        {
            res = false;
            return res;
        }
        left++;
        right--;
    }
    return res;
}
int main()
{
    //验证回文字符串
    string s3 = "A man,a plan, a canal, Panama";
    bool r3 = isPalidrome(s3);
    cout << r3 << endl;
    return 0;
}

到了这里,关于算法通关村第十二关-字符串基础题目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 不简单的字符串转换问题(算法村第十二关青铜挑战)

    709. 转换成小写字母 - 力扣(LeetCode) 给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。 1 = s.length = 100 解 大写字母和小写字母的值之间存在固定的差异。例如,小写字母 a 的ASCII值为 97 ,而对应的大写字母 A 的ASCII值为 65 ,两者之差恰

    2024年01月25日
    浏览(47)
  • 【LeetCode】《LeetCode 101》第十二章:字符串

    思路及代码: 242 . 有效的字母异位词 思路及代码: 205. 同构字符串 思路及代码: 647. 回文子串 思路及代码: 696 . 计数二进制子串 思路及代码 : 224. 基本计算器 思路及代码: 227. 基本计算器 II 思路与代码: 28 . 找出字符串中第一个匹配项的下标 思路及代码 :409. 最长回文

    2024年02月10日
    浏览(83)
  • 算法通关村十三关 | 数组字符串加法专题

    题目:LeetCode66,66. 加一 - 力扣(LeetCode) 我们只需要从头到尾依次运算,用常量标记是否进位,需要考虑的特殊情况是digits = [9,9,9]的时候进位,我们组要创建长度加1的数组,首位添加为1即可。         给定两个非负形式的字符串num1和num2,计算他们的和以字符串形式返

    2024年02月11日
    浏览(41)
  • 算法第十七天-构造有效字符串的最少插入数

    考虑abc的个数 假设答案有n个\\\"abc\\\"组成,那么需要插入的字符个数为 3 ∗ n − l e n ( s ) 3*n - len(s) 3 ∗ n − l e n ( s ) 。 对于相邻的两个字符x和y(x在y左侧): 如果 x y xy x y ,那么x和y可以在同一个\\\"abc\\\"内,否则一定不在; 如果 x ≥ y xge y x ≥ y ,那么x和y一定不可以在同一个

    2024年01月17日
    浏览(48)
  • 【算法入门】字符串基础

    字符串通常以\\0作为结束标志,\\0的ASCll码值为0,计算字符串长度时会忽略斜杠零。 1.字符串相关库函数 在讲解题目之前我们先介绍几个关于字符串操作常用的几个库函数 💫(1) strcpy函数 💫 strcp y也叫 拷贝函数 ,头文件为 string.h ,顾名思义它可以将一个字符串数组的内容

    2024年02月02日
    浏览(57)
  • LeeCode前端算法基础100题(21) 同构字符串

    一、问题详情: 给定两个字符串  s  和  t  ,判断它们是否是同构的。 如果  s  中的字符可以按某种映射关系替换得到  t  ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只

    2024年01月19日
    浏览(46)
  • C++入门学习(十二)字符串类型

    上一节(C++入门学习(十一)字符型-CSDN博客)中我们学到如何表示和使用一个字符串,本篇文章是字符串(多个字符)。 定义字符串主要有两种方式: 第一种: char str[] = \\\"win\\\";  //char 变量名[] = \\\"字符串\\\" 第二种: #include string string str1 = \\\"winner\\\"; / / 两种方式代码:  注意字符

    2024年01月23日
    浏览(40)
  • 【编码狂想】LeetCode 字符串和数组篇:挑战算法精髓,深化程序设计基础

    ​ 🌈 个人主页: Sarapines Programmer  🔥 系列专栏: 本期文章收录在《C语言闯关笔记》,大家有兴趣可以浏览和关注,后面将会有更多精彩内容!  ⏰翰墨致赠:翩翩风华激彩虹,豪情壮志醉长空。 剑指星河舞红尘,梦驰烈马向未来。 ​ ​ 🎉欢迎大家关注🔍点赞👍收藏

    2024年02月04日
    浏览(51)
  • 算法通关村第二关——链表反转

    链表反转,就是链表原来是1-2-3-4-5,经过反转处理过后变成5-4-3-2-1 处理链表反转,有两种方式,一个是建立虚拟头结点,一个是直接操作链表反转。  这是执行的流程 最核心的两行就是 直接想我要让她反转,我现在设立了虚拟头结点,那我就要让新加进这个反转链表的结点

    2024年02月13日
    浏览(36)
  • 算法通关村第二关——单链表加一

    LeetCode369 用一个非空单链表来表示一个非负整数,然后将这个整数加一。你可以假设这个整数除了 0 本身,没有任何前导的 0.这个证书的各个数位按照 高位在链表头部、低位在链表尾部 的顺序排列。 计算是从低位开始的,而链表是从高位开始的,所以要处理就必须反转过来

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包