首页 > 编程语言 >代码随想录算法训练营第8天 | 字符串

代码随想录算法训练营第8天 | 字符串

时间:2024-03-30 23:12:39浏览次数:32  
标签:begin slow string int 训练营 随想录 fast 算法 str

344反转字符串

void reverseString(vector<char>& s) {
        char tmp;
	int i = 0, j = s.size() - 1;
	while (i<j)
	{
		tmp = s[i];
		s[i] = s[j];
		s[j] = tmp;
		i++; j--;
	}
}

swap库函数的实现:位运算法——按位异或

s[i] ^= s[j];
s[j] ^= s[i];
s[i] ^= s[j];

541反转字符串 II

string reverseStr(string s, int k) {
    for (int i = 0; i < s.size(); i += (2 * k)) {
        // 1. 每隔 2k 个字符的前 k 个字符进行反转
        // 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符
        if (i + k <= s.size()) {
            reverse(s.begin() + i, s.begin() + i + k);
        }
        else {
        // 3. 剩余字符少于 k 个,则将剩余字符全部反转。
            reverse(s.begin() + i, s.end());
        }
    }
    return s;
}

卡码网54替换数字

对于线性数据结构,填充或者删除,后序处理会高效的多

#include<iostream>
#include <string>
using namespace std;
int main() {
	string str;
	cin >> str;
	int cnt=0;
	for (char a : str) {
		if (a >= '0' && a <= '9')
			cnt++;
	}

	int oldSize = str.size();
	str.resize(oldSize + cnt * 5);  //扩充字符串大小
	int newSize = str.size();

	for (int i = oldSize - 1, j = newSize - 1; i >= 0; i--, j--) {
		if (str[i] < '0' || str[i]>'9') {
			str[j] = str[i];
			continue;
		}
		else
		{
			str[j] = 'r';
			str[j-1] = 'e';
			str[j-2] = 'b';
			str[j-3] = 'm';
			str[j-4] = 'u';
			str[j-5] = 'n';
			j -= 5;
		}
	}
	cout << str;
}

151翻转字符串里的单词

难点:去除多余空格

string reverseWords(string s) {
	int slow = 0, fast = 0;
	while (s[fast] == ' ')   //去除最前面空格
	{
		fast++;
	}
	for (; fast < s.size(); fast++) {
		if (s[fast] != ' ')
			s[slow++] = s[fast];
		else {                //去掉中间多余空格
			if (s[fast] == s[fast - 1])  
				continue;
			else
				s[slow++] = ' ';
		}
	}
	if (s[slow-1] == ' ')  //去除最后多余空格
		slow--;
	
	s.resize(slow);
	reverse(s.begin(), s.end());

	int start = 0;
	for (int i = 0; i <=s.size(); i++) {
		if (i == s.size() || s[i] == ' ')
		{
			reverse(s.begin() + start, s.begin() + i);  //左闭右开
			start = i + 1;
		}
	}

	return s;
}

卡码网55右旋转字符串

整体倒叙+子串倒叙

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
    int n;
    string s;
    cin >> n;
    cin >> s;
   
    reverse(s.begin(), s.end()); // 整体反转
    reverse(s.begin(), s.begin() + n); // 先反转前一段,长度n
    reverse(s.begin() + n, s.end()); // 再反转后一段

    cout << s << endl;

}  

标签:begin,slow,string,int,训练营,随想录,fast,算法,str
From: https://www.cnblogs.com/ddup-cpp/p/18105920

相关文章

  • 【图论】3.30学习记录 k短路(A*算法)
    从最短路说起的k短路3.26看了最短路和次短路。我们发现次短路实际上就是把最短路给破坏掉然后跑最短路...那我想...是不是破坏(k-1)次就能得到k短路呢,很显然是的,但是复杂度比较高,(因为一次dij是O(nlogn)级别的,次短路的话最坏要跑m次当最短路有m条边的时候)那么k比较大的时候就......
  • Java 递归算法系列:建议收藏的 13 个经典问题的代码实现详解
    递归算法题求阶乘(Factorial)斐波那契数列(FibonacciSequence)汉诺塔(TowerofHanoi)遍历树节点(TreeTraversal)数组反转(ArrayReversal)爬楼梯问题(ClimbingStairsProblem)回文数检测(PalindromeChecking)找出数组中的最大值(FindingMaximumValueinanArray)分治算法......
  • Leetcode算法训练日记 | day11
    一、有效的括号1.题目Leetcode:第20题给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。3.每个右括号都有一个对应的相同类型的左括号。示例1:输入:s="()"......
  • Leetcode算法训练日记 | day10
    一、用栈实现队列1.题目Leetcode:第232题请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头移除并返回元素intpeek()返回队列开头的元素......
  • KMP算法
    一.概述要解决的问题:字符串匹配问题。目标串target:"aabaabaafa"模式串pattern:"aabaaf"传统算法:双层for循环遍历目标串target和模式串pattern,判断pattern在target第一次出现的位置。时间复杂度为:\(O(pattern.size()*target.size())\)=\(O(m*n)\)KMP算法核心思路:在对目标......
  • 一维差分算法
    目录背景:一维插分应用场景一维差分法原理解释背景:在刷javaA组蓝桥本真题时,碰到了一个用二维差分方法的解题思路,意识到自己差分不熟悉,就想先学习一下一维差分。一维插分应用场景题目给出一个一维数组,并多次修改某一区间的值。例如:一个数组长度为8,初始均为0,输入数......
  • 毕业设计:基于深度学习的电影推荐算法 -- 以豆瓣为例 大数据
    目录前言设计思路一、课题背景与意义二、算法理论原理2.1GRU网络模型2.2语言模型2.3推荐算法三、检测的实现3.1数据集3.2实验环境搭建3.3实验及结果分析最后前言    ......
  • [InternLM训练营第二期笔记]1. 书生·浦语大模型全链路开源开放体系
    由于想学习一下LLM相关的知识,真好看到上海AILab举行的InternLM训练营,可以提高对于LLM的动手能力。每次课堂都要求笔记,因此我就想在我的CSDN上更新一下,希望和感兴趣的同学共同学习~本次笔记是第一节课,介绍课。课程视频:BilibiliInternLM2Technicalreport:arxiv1.......
  • CHC5223数据结构和算法
    CHC5223数据结构和算法2023-2024第2学期课业1价值40%的课程个人工作学习成果学生将能够理解:1.1数据结构1.2数据结构的应用1.3面向对象编程概念1.4程序测试方法学生将掌握以下方面的技能:2.1数据抽象2.2数据结构的使用2.3使用高级面向对象语言进行更高级的编程2.4程序测试......
  • 算法模板 v1.10.5.20240330
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......