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

目录

1.题目描述

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

2.1算法解析

2.2代码实现

3.方法二(三次逆置)

3.1算法解析

3.2代码实现

4.方法三(库方法)

4.1算法解析

4.2代码实现

5.完结散花


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

OJ刷题:《剑指offer》之左旋字符串!_第1张图片

1.题目描述

OJ刷题:《剑指offer》之左旋字符串!_第2张图片

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

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

2.1算法解析

OJ刷题:《剑指offer》之左旋字符串!_第3张图片

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

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

OJ刷题:《剑指offer》之左旋字符串!_第4张图片

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算法解析

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

OJ刷题:《剑指offer》之左旋字符串!_第5张图片

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

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

OJ刷题:《剑指offer》之左旋字符串!_第6张图片

OJ刷题:《剑指offer》之左旋字符串!_第7张图片

. strcat

OJ刷题:《剑指offer》之左旋字符串!_第8张图片

OJ刷题:《剑指offer》之左旋字符串!_第9张图片

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

 OJ刷题:《剑指offer》之左旋字符串!_第10张图片

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.完结散花

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

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

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

我们下期不见不散~~

你可能感兴趣的:(java,算法,开发语言)