OJ刷题:《剑指offer》之左旋字符串!

目录

1.题目描述

2.方法一(元素一一挪)

2.1算法解析

2.2代码实现

3.方法二(三次逆置)

3.1算法解析

3.2代码实现

4.方法三(库方法)

4.1算法解析

4.2代码实现

5.完结散花


创作不易,宝子们!如果这篇文章对你们有帮助的话,别忘了给个免费的赞哟~

1.题目描述

https://www.nowcoder.com/share/jump/1889476041706625158356 题目链接放这里啦~

2.方法一(元素一一挪)

2.1算法解析

 由上图我们可以发现左移6次左移1次后的结果相同,所以我们可以用n%len来表示字符串左移的元素个数,那我们该怎么左移呢~

下面我用图像来表示核心算法~

2.2代码实现

 下面是在牛客上解题的完整代码~

char* LeftRotateString(char* str, int n) 
{
    if(str==NULL)
	return NULL;
	int len=strlen(str);
	if(len==0)
	return str;
	int time=n%len;
	if(time==0)
	return str;//不用处理,返回原数组即可
	for (int i = 0; i < time; i++)
{
	int tmp = str[0];
	int j = 0;
	for (; j < len - 1; j++)
	{
		str[j] = str[j + 1];
	}
	str[j] = tmp;
}
return str;
}

3.方法二(三次逆置)

3.1算法解析

废话不多说,直接上图啦~

怎么样,算法是不是很简单呢~ 

3.2代码实现

void Reverse(char str[], int start,int end)
{
	while (start < end)
	{
		int tmp = str[start];
		str[start] = str[end];
		str[end] = tmp;
		start++;
		end --;
	}
}//部分逆置函数
char* LeftRotateString(char* str, int n) 
{
    int len=strlen(str);
	if(len==0)//没有这个判断,编不过去
	return str;
	int k=n%len;
	Reverse(str,0,k-1);
	Reverse(str,k,len-1);
	Reverse(str,0,len-1);
	return str;
}

4.方法三(库方法)

4.1算法解析

再讲具体算法前,这里要先介绍俩个库函数(strcpy,strcat)

. strcpy

. strcat

 下面就是这种算法的图解啦~

 

4.2代码实现

char* LeftRotateString(char* str, int n) 
{
    if(NULL==str)
    return NULL;
    int size=strlen(str);
    if(size==0)
        return str;//这里换成NULL就不能通过
    int k=n%size;
    char*tmp=(char*)malloc(sizeof(char)*2*size);//动态内存开辟俩倍空间
    strcpy(tmp,str);
    //我们下意识的这里也同样使用strcpy但是这会存在问题。
    //因为strcpy会拷贝‘\0’,导致输出的函数可能缺少一部分,而strcat会覆盖‘\0’。
    strcat(tmp,str);
    tmp[k+size]='\0';
    return tmp+k;
}

5.完结散花

好了,这期的分享到这里就结束了~

如果这篇博客对你有帮助的话,可以用你们的小手指点一个免费的赞并收藏起来哟~

如果期待博主下期内容的话,可以点点关注,避免找不到我了呢~

我们下期不见不散~~

相关推荐

  1. offer面试42 翻转字符顺序 VS 字符串

    2024-02-02 14:52:02       43 阅读
  2. C语言——oj——字符串

    2024-02-02 14:52:02       41 阅读
  3. 牛客offer其他算法篇

    2024-02-02 14:52:02       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-02 14:52:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-02 14:52:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-02 14:52:02       87 阅读
  4. Python语言-面向对象

    2024-02-02 14:52:02       96 阅读

热门阅读

  1. react实现组件通信的案例

    2024-02-02 14:52:02       47 阅读
  2. 快速排序板子(备战蓝桥杯)

    2024-02-02 14:52:02       57 阅读