【算法题】字符串向左或向右循环移动

Java算法题 在技术笔试中,算法题主要考察对基础数据结构(数组、链表、树、栈 / 队列、图)的掌握,以及经典算法思想(动态规划、贪心、查找排序、回溯)的应用。以下按分类,整理高频笔试算法题,包含题目描述、核心思路与代码实现(以 Java/Python 为主,兼顾可读性与效率)。 阅读详情

问题描述:将一个具有n个元素的字符串向左循环移动i个位置。例如,假设n=8,i=3,那么字符串abcdefgh移动之后变成defghabc.
对于整数数组1,2,3,4,5,6,7,8,9,10循环向左移动5位的结果为6 7 8 9 10 1 2 3 4 5.

条件: 时间复杂度O(n), 空间复杂度O( 1 ).

人们可能想到的解法:
一:
先将数组或字符串中的前i个元素复制到一个临时数组中,接着将余下的n-i个元素左移i个位置,然后再将前i个元素从临时数
组中复制到数组中后面的位置。这个方案使用了i个额外的位置,浪费了空间。
二:定义一个函数来将x向左旋转一个位置,然后调用该函数i次,但是这种方法太浪费时间。时间与n成比例

最简单和最有效的方法如下(分块旋转和整体旋转):
将一个具有10个元素的数组(1 2 3 4 5 6 7 8 9 10)想左循环移动5个位置,采用摇手的方法:
先是掌心对着自己,左手在右手的上面,如下图所示:

 
实现代码如下:

#include<stdio.h>
void  reverse(int a[],int start,int end ) //转数组a中start到end之间的元素
{
  int temp=0;
  int i=start;
  int j=end;
  while(i<=j)
  {
    temp=a[i];
  a[i]=a[j];
     a[j]=temp;
  i++;
  j--;
  }

}

void show(int a[],int len)
{
 for(int i=0;i<len;i++)
 {
  printf("%d ",a[i]);
 }
 printf("\n");
}
void main()
{
 int a[]={1,2,3,4,5,6,7,8,9,10};
 int len=sizeof(a)/sizeof(int);
 show(a,len);
  int steps=5;//循环向左移动的位数
  reverse(a,0,steps-1);
  show(a,len);
  reverse(a,steps,len-1);
  show(a,len);
  reverse(a,0,len-1);
  show(a,len);
 
}


对于字符串的翻转可以采用strcpy或memcpy函数来实现,下面该题在许多公司笔试题里面出现过。
如:

void loopmove(char *pStr,int steps)
{
int n=strlen(pStr)-steps;
char temp[100];
strcpy(temp,pStr+n);
strcpy(temp+steps,pStr);
*(temp+strlen(pStr))='\0';
strcpy(pStr,temp);
}


 

我的算法学习之路-算法题-回环变位 1.回环变位 算法(第四版)1.2.6题: 如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个算法检查两个给定的字符串s和t是否互为回环变位。 阅读详情

相关推荐

点击率预测的贝叶斯平滑

概述 电商领域中经常需要计算或预测一些转化率指标,如最典型的CTR(点击率,Click-Through Rate)。这些转化率可以是模型的预测值,也可以作为模型的特征(feature)使用。以商品点击率预测为例,CTR的值等于点击量(Click)除以曝光量(Impression或Exposure)。以rr表示点击率, r=CI(1)r=\frac{C}{I} \tag{1}. 但在实际应

小平子的专栏 3万+

字符串循环左移和右移

问题: 假设给定一个字符串S,想要把其前k个字符左移放到字符串的尾部,比如S:beautiful,移动的结果字符串为:utifulbea;这种移动方式就叫做字符串的循环左移,且左移k位。 问题分析: 假如字符串S包含n个字符,那么明显有,循环左移k位等价于循环左移k+n位,而且循环左移和循环右移其实是一样的,如左移k位就等价于左移n-k位。 一般的,遇到这一问题,大多数人会首先想到一位一位

凌桑的自我修养--You are the Eternity 3741

【鼠标在不点击的情况下,直接移动到QT控件上不显示提示信息】

有时明明已经调用了setToolTips方法,鼠标移动到QT控件上仍然不会有提示信息,这时候就需要具体分析下。重点就是标红的这段话,大概意思就是。.h文件中加入鼠标移动事件的定义。.cpp文件中实现该事件。

ZTH_G的博客 2423

循环移位:循环左移和循环右移

&nbsp; &nbsp; &nbsp; &nbsp;循环移位就是把数值变成二进制,然后循环移动的过程;换句话说,循环移位就是将移出的低位放到该数的高位(循环右移)或把移出的高位放到该数的低位(循环左移),左移,和右移动都是对整数进行的操作,在Win32控制台应用程序中,整形占4Byte节32bit。 &nbsp; &nbsp; &nbsp; &nbsp;循环左移的过程: &nbsp;...

Keep Fighting All The Time 8万+

RISC-V V向量指令集学习笔记——访存指令

RISC-V V向量指令集学习笔记——访存指令

qq_41724469的博客 5132

检索增强世界模型(R-WoM)原理与应用实践

世界模型是AI系统理解环境的核心技术,通过构建环境的内部表示实现状态预测和行动规划。传统方法基于RNN或VAE等神经网络,而检索增强世界模型(R-WoM)创新性地引入检索机制,结合外部记忆库提升系统性能。这种架构突破模型参数限制,使AI能像人类一样利用历史经验解决问题,在游戏AI、虚拟助手等场景表现优异。关键技术包括FAISS相似性搜索、分层记忆管理和动态检索策略,其中Transformer编码器和GRU动态模型的组合实现高效环境建模。实践表明,该方法可提升47%的战术多样性,加快32%的应急响应速度。

weixin_42676876的博客 341

串的轮换

轮换 串“abcd”每个字符都向右移位,最右的移动到第一个字符的位置,就变为“dabc”。这称为对串进行位移=1的轮换。同理,“abcd”变为:“cdab”则称为位移=2的轮换。 下面的代码实现了对串s进行位移为n的轮换。请补全缺失的代码。 把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。 void shift(char* s, in

u013599426的专栏 924

49、非合作目标运动参数估计与状态滤波方法研究

本文研究了非合作空间目标的运动参数估计与状态滤波方法。通过分析目标的章动运动特性,建立了运动方程,并分别提出了基于最小二乘法的质心运动参数估计方法和旋转运动参数估计方法。同时,设计了误差状态卡尔曼滤波器(ESKF)用于姿态滤波和角速度估计,以提高估计精度。仿真实验验证了所提方法的有效性,能够准确估计目标的运动参数和状态信息,为在轨服务提供了技术支持。

gpt4scribbler的博客 88

字符串循环左移

今天再看面试题时 出现了一个字符串左右移动循环的问题,看了一遍还没有弄懂,就发了点时间来看了一下字符数组与字符指针的问题,最终还是得到解决,呵呵,只要肯发功夫,还是会有收获的   例如:有一组char的字符串:abcdefghijk 。你要循环左移3位变成ijkabcdefgh(也有写出ijkabcdefghi);或右移三位变成defghijkabc(也有写成cdefghijkabc);

song11km的专栏 1055

AI Agent的数据安全与隐私保护措施

AI Agent(人工智能代理)作为一种能够感知环境、做出决策并采取行动的智能实体,在现代社会的各个领域中得到了广泛的应用,如智能客服、自动驾驶、金融风险评估等。随着其应用的不断拓展,AI Agent处理和存储的数据量急剧增加,这些数据包含了大量的个人敏感信息和商业机密。因此,确保AI Agent的数据安全与隐私保护变得至关重要。本文的目的在于全面探讨AI Agent的数据安全与隐私保护措施,涵盖从数据的采集、存储、处理到传输的整个生命周期。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 2865

【学习系列】SAP RAP 22:Excel文件上传和读取(非扩展&扩展方式)

本文介绍了在RAP中实现Excel文件上传处理的三种方法:1) 使用@Semantics.largeObject注解实现简单上传下载,但限制在ObjectPage页面使用;2) 通过自定义action弹窗实现上传功能,但存在无法自动刷新列表等限制;3) 结合CustomUIExtension实现更灵活的完整功能,但需要UI5开发技能。文章详细说明了每种方法的实现步骤,包括数据库表设计、注解配置、前端界面开发和后端处理逻辑,并比较了各自的优缺点。最后通过一个处理不同币种数据的示例,展示了如何实现业务处理逻辑。

DeveloperMrMeng的博客 621

7-20 字符串循环左移 (20 分)

输入一个字符串和一个非负整数N,要求将字符串循环左移N次。 输入格式: 输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。 输出格式: 在一行中输出循环左移N次后的字符串。 输入样例: Hello World! 2 结尾无空行 输出样例: llo World!He 结尾无空行 我的代码(逃课版): #include<stdio.h> #include<string.h> int main(){ i

fan_heng的博客 3348

Cleo Synchronization接口任意文件读取漏洞CVE-2024-50623 附POC

微信公众号搜索:南风漏洞复现文库该文章 南风漏洞复现文库 公众号首发Cleo。

nnn2188185的博客 480

算法题总结(八)——字符串

给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。所以判断字符串s是否由重复子串组成,只要两个s拼接在一起,里面还出现一个s的话,就说明是由重复子串组成。当然,我们在判断 s + s 拼接的字符串里是否出现一个s的的时候,,这样避免在s+s中搜索出原来的s,我们要搜索的是中间拼接出来的s。

maruofan666的博客 830

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【力扣算法题】字符交换使两字符串相等

【力扣算法题】字符交换使两字符串相等

qq_44671773的博客 1486

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

每日算法题三道之字符串循环移动以及词语的翻转

题目: 2、给定一个字符串S[0…..N-1],要求把S的前k个字符移动到S的尾部,如把字符串”abcdef”前面的2个字符’a’,‘b’移动到字符串的尾部,得到新字符串”cdefab”:即字符串循环左移k。要求时间复杂度为O(N),空间复杂度为O(1)。 1)思路一:逐个字符左移,将bcdef依次左移1个,再将a移到末尾;b是同样的操作,这样最坏时间复杂度为O(N2)。 2)思路二:先将a...

rlyhaha的博客 343

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

bat for循环_面试BAT 却被小小字符串秒杀?这13道题帮你一举击败字符串算法题...

推荐阅读:秋招面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等字节跳动秋招面经:后端开发工程师,已拿意向书美团一面凉凉:MySQL+Java+Redis+算法+网络+Linux等一个都讲不清前言面试BAT却被一道小小字符串算法题秒杀,崩溃不?没事,这就来总结一下13道字符串必备算法题,分享出来给大家一起参考学习,一举击败字符串~首先在这里先分享一下我的算法刷题...

weixin_39616477的博客 72

数组,字符串算法题

两个数组合并成一个数组:请把两个数组 [‘A1’, ‘A2’, ‘B1’, ‘B2’, ‘C1’, ‘C2’, ‘D1’, ‘D2’] 和 [‘A’, ‘B’, ‘C’, ‘D’],合并为 [‘A1’, ‘A2’, ‘A’, ‘B1’, ‘B2’, ‘B’, ‘C1’, ‘C2’, ‘C’, ‘D1’, ‘D2’, ‘D’]。 let a1 = ['A1', 'A2', 'B1', 'B2'...

阳光下的冷静的博客 684

有关线性表的算法题

判断一个非空字符串是否是回文。

Yoin. 1015

蓝桥杯关于字符串的算法题目(leetcode回文串的判断问题)

1.题目概述 2.思路分析 3.代码解析

大学成长道路上的探索经历与点滴思考,与君共勉,共筑成长。 579

字符串算法题练习2(反转字符串2)

给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。示例:输入: s = "abcdefg", k = 2输出: "bacdfeg"

m0_74897953的博客 181

每日一道算法题(反转字符串)

如果将结束条件设为“小于等于”,则当两个指针到达字符串的中间位置时,可能会执行一次不必要的交换。实际上,当两个指针指向中间的同一个字符或交错时,再进行交换是没有意义的。从字符串的两端开始,向中间逐步移动指针。每次移动时,交换指针。所指向的字符,直到两个指针相遇或交错,此时所有字符已完成交换。循环进行字符交换时,结束条件应设置为指针。,分别指向字符串的起始位置和末尾位置。

y2091612030的博客 613

nyoj 658 字符串右移(字符串处理问题)

/* 字符串右移 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 LZQ最近迷上了字符串,于是他有一个问题想考你,聪明的你一定知道答案。问题如下:给你一个字符串,让你对其进行向右移动K次,输出新的字符串。 输入 输入数据有多组,每组有一个字符串STR与一个数字K,表示对字符串STR向右移动K位。 输出 输出新的字符串STR1. 样例输入 abcd

亿念之茶的专栏 846

经典中的经典之字符串

c++初阶语法之字符串刷题,题目非常经典,适合学c语言和c++的同学参考,有很多精彩的部分

2302_80084329的博客 927

541. 反转字符串II(字符串算法题)

题目要求对字符串s按特定规则反转:每2k个字符为一组,反转前k个字符,剩余部分保持原样。解法采用双指针法,通过跳跃式遍历(每次移动2k位)和条件判断确定反转区间,高效完成字符反转。关键点在于利用Math.min控制边界,避免数组越界。该方法时间复杂度为O(n),空间复杂度为O(n)(需转为字符数组)。示例验证如输入"abcdefg"(k=2)输出"bacdfeg",符合预期。

m0_68880377的博客 714

每日算法刷题Day9-字符串移位包含问题、字符串乘方

⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。🔥本文已收录于算法刷题系列专栏:欢迎订阅,持续更新。

timerring的博客 4361
上一篇: 算法设计经典书籍推荐
下一篇: 【算法题】整数与字符串之间的相互转化
xiaoding133
博客等级 码龄19年 415粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值