已经字符串adbcefg123,给定位置 i,例如i=3,将整个字符串循环左移i位,得到cefg123adb
请编写程序实现如上 字符串循环左移算法
算法一:
1.将第0个字符移动到最后个位置,之后将字符串从后往前移动一个字符
2.重复步骤1 i次
3.打印出最后结果字符串
/**
* 字符串循环左移
* @param i
* @param source
* @return
*/
public String loopLeftShift(int i, String source)
{
if (source == null) {
return null;
}
int len = source.length();
if (i <= 0 || i >= len) {
return null;
}
StringBuilder sb = new StringBuilder(source);
for (int j = 0; j < i; j++) {
int begin=0;
int end=len-1;
char beginChar=sb.charAt(begin);
while (end > 0) {
beginChar= swap(end,beginChar,sb);
end =end-1;
}
swap(0,beginChar,sb);
}
return sb.toString();
}
时间复杂度分析: o(n*i) 如果i=n-1,则为o(n^2)
思考并改进算法:
改进版本一:
由这个 第j个位置的字符移动到 (j-i+len)%len 的位置 的想法,则可以通过调整n个元素的位置来达到循环左移的目的
/**
* 循环左移动实现方法二
* @param i
* @param source
* @return
*/
public String loopLeftShift2(int i,String source)
{
if (source == null) {
return null;
}
int len = source.length();
if (i <= 0 || i >= len) {
return null;
}
StringBuilder sb = new StringBuilder(source);
//第j位直接移动 (j-i+len)%len 位
int next =0;
int begin=next;
char beginChar=sb.charAt(begin);
int count =0;
while(true)
{
next=(next-i+len)%len;
beginChar=this.swap(next,beginChar,sb);
count++;
if(count ==len){
break;
}
//解环
if(next ==begin){
next =next+1;
begin =next;
beginChar=sb.charAt(begin);
}
}
return sb.toString();
}
时间复杂度;o(n)
分享到:
相关推荐
1.将字符串循环左移,如ABCDEFG,从3位置循环左移后为DEFGABC 1.将数值循环左移,如1234567,从3位置循环左移后为4567123
本文实例为大家分享了python字符串循环左移的具体代码,供大家参考,具体内容如下 字符串循环左移 给定一个字符串S[0…N-1],要求把S的前k个字符移动到S的尾部,如把字符串“abcdef”前面的2个字符‘a’、‘b’移动...
字符串循环左移算法问题描述:暴力法利用三次翻转巧妙实现 问题描述: 给定一个字符串s[0…n-1],要求将s的前k个字符移动到字符串s的尾部。 举个栗子:将字符串“HelloWorld”的前5个字符移动到字符串的尾部,即要...
pta的C语言设计代码
本篇文章将详细探讨字符串操作相关的知识点,重点讲述字符串循环左移、全排列问题及其解决方案。 首先,字符串循环左移问题是指将一个字符串S的前k个字符移动到字符串的尾部,例如字符串“abcdef”前两个字符“ab”...
本资源主要介绍了计算机二级C语言上机常考算法的程序实现,涵盖了 Newton 迭代法、冒泡排序法、最大最小值、素数判断、析取数字、选择排序法、字符串循环右移和字符串循环左移八个方面的算法实现。 一、Newton 迭代...
1. **字符串循环左移**:这是一个常见的字符串操作,要求将字符串的前k个字符移到末尾。例如,字符串"abcdef"循环左移2位变为"cdefab"。实现这个操作的高效方法是在O(n)的时间复杂度和O(1)的空间复杂度内完成。暴力...
1. **字符串循环左移**:给定一个字符串和一个整数k,将字符串中的每个字符向左移动k个位置。例如,字符串"abcdefg",k=2,移动后的结果为"efgabcd"。可以使用双指针技巧,将字符串分为两部分,然后交换它们。 2. *...
### 字符串循环左移 #### 代码示例: ```c void fun(char s[], int m) { int i, j; char ch; for (i = 0; i ; i++) { ch = s[0]; for (j = 1; s[j] != '\0'; j++) { s[j - 1] = s[j]; } s[j - 1] = ch; } ...
首先,让我们来解决字符串循环右移的问题。方法一:利用已有的字符串函数。我们可以使用strcpy函数和strlen函数来实现字符串的循环右移。下面是具体的实现代码: ```c void rightloop(char *a, int n) { char b...
C# 循环左移字符示例是指将一个字符串中的字符进行循环左移操作,以达到将字符串中的一部分字符移至字符串的另一部分的效果。这种操作在实际应用中有着非常重要的作用,例如在数据加密、字符串处理等领域。 循环...
如下所示: str_1='wo shi yi zhi da da niu/n'str_list=list(str_1) nPos=str_list.index('/') str_list.insert(nPos,',') str_2=.join(str_list) ... 您可能感兴趣的文章:python字符串循环左移Python拼接字符串的7
华为2019在线笔试题,现整理如下,以供之后参考 GitHub ...-- 对合法字符串循环左移10次,在进行排序输出。(举例:比如字符串"abc",循环左移一次的结果为"bca") 输入描述: (1) 字符串中的字符集合为
7-31 字符串循环左移 20 4527 13605 0.33 7-32 说反话-加强版 20 4030 25470 0.16 7-33 有理数加法 15 4476 10862 0.41 7-34 通讯录的录入与显示 10 4323 19524 0.22 7-35 有理数均值 20 3281 17202 0.19 7-36 复数...
- **字符串循环左移**: - 问题描述:对于给定的字符串和整数n,实现字符串的循环左移n位。 - 解决方案:利用三次逆序的方法,先逆序前n位,再逆序后面的部分,最后逆序整个字符串。这种方法的时间复杂度为O(n),...
5. **字符串循环左移**: 通过切片和拼接操作,可以实现字符串的循环左移。将字符串分为两部分,然后将第二部分放在第一部分前面。 ```python s = str(input()) n = int(input()) a = s[:n] b = s[n:] print(b + a...
如 `ll` 用于存储最长字符串的长度,`xx` 用来计算字符串居中的列号,`i` 和 `j` 分别用于表示右移和左移操作的起始列号,`lorg` 存储左移后新字符串的起始列号,`count` 和 `count1` 作为循环计数器。 在代码段中...
- Rotate String:字符串循环左移或右移指定的字符数。 - Reverse Words in a String:反转字符串中的所有单词。 - Valid Palindrome:检查一个字符串是否是回文。 - Longest Palindromic Substring:找到字符串中的...