当前位置: 首页 > news >正文

《剑指offer》之左旋字符串

判断一个字符串是否为另外一个字符串旋转之后的字符串。

输入示例:输入字符串s1 和 s2, 并且会输入移动位数。

例如:给定 s1 =AABCD 和 s2 = BCDAA,返回1

给定s1=abcd和s2=ACBD,返回0.

AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC

方法一

       一个一个移动,判断是否相同。

#include <stdio.h>
#include <string.h>

int Find(char* str1, char* str2)
{
	int flag = 0;//判断是否为左旋字符串
	int len = strlen(str1);
	int i = 0, j = 0;
	for (i = 0; i < len; i++)
	{
		char tmp = str1[0];
		for (j = 0; j < len - 1; j++)
		{
			str1[j] = str1[j + 1];
		}
		str1[j] = tmp;
		if (strcmp(str1, str2) == 0)
		{
			flag = 1;
			break;
		}
	}
	return flag;
}

int main()
{
	char str1[10];
	char str2[10];
	gets(str1);
	gets(str2);
	int flag = Find(str1, str2);
	if (flag)
	{
		printf("是左旋后的字符串\n");
	}
	else
	{
		printf("不是\n");
	}
	return 0;
}

方法二

       使用库函数 strcpy 和 strncat;将 str1 后半部分 拷贝到arr1 里面,再将 str1 的前半部分拼接到 arr1 里面,最后判断 arr1 是否和 str2 一致即可。

#include <stdio.h>
#include <string.h>

int main()
{
	char str1[10];
	char str2[10];
	char arr1[20];

	gets(str1);
	gets(str2);

	int n;
	scanf("%d", &n);//输入左移几位

	int len = strlen(str1);
	int k = n % len;  //实际移动位数

	strcpy(arr1, str1 + k);//将str1后半部分 拷贝到arr1里面
	strncat(arr1, str1, k); //将str1 的前半部分拼接到arr1里面

	if (strcmp(arr1, str2) == 0)
	{
		printf("是旋转后的字符串\n");
	}
	else
	{
		printf("不是\n");
	}
	return 0;
}

方法三

       三段翻转:

在这里插入图片描述

#include <stdio.h>
#include <string.h>

void reverse(char* p, int str, int end) 
{
	char tmp = p[str];
	for (int i = str; i < end; i++)
	{
		p[i] = p[i + 1];
	}
	p[end] = tmp;
}

int main()
{
	char str1[10];
	char str2[10];
	gets(str1);
	gets(str2);

	int len = strlen(str1);

	int n;
	scanf("%d", &n);

	reverse(str1, 0, n - 1);
	reverse(str1, n - 1, len - 1);
	reverse(str1, 0, len - 1);

	if (strcmp(str1, str2) == 0)
	{
		printf("是旋转后的字符串\n");
	}
	else
	{
		printf("不是\n");
	}
	return 0;
}

相关文章:

  • Vite 下一代的前端工具链,前端开发与构建工具
  • 零基础学编程从入门到精通,系统化的编程视频教程上线,中文编程开发语言工具构件之缩放控制面板构件用法
  • 动态数据源
  • Rust安装——Win10
  • 5年前端仔的2023年终总结
  • Linux C/C++ 原始套接字:打造链路层ping实现
  • CleanMyMac X 4.14.7帮您安全清理Mac系统垃圾
  • ElasticSearch搜索与分析引擎-Linux离线环境安装教程
  • Node.js的安装
  • Java后端须知的前端知识
  • ansible批量修改主机密码
  • Linux前后端程序部署
  • P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数--2024冲刺蓝桥杯省一
  • 如何以管理员身份删除node_modules文件
  • MATLAB实现二阶模糊逻辑控制系统仿真
  • 适用于 Windows 和 Mac 的 16 款最佳数据恢复软件
  • Leetcode 377 组合总和 Ⅳ
  • FlinkCDC全量及增量采集SqlServer数据
  • java -jar启动SpringBoot项目时配置文件加载位置与优先级
  • BC107 矩阵转置
  • 昆明阳宗海风景名胜区19口井违规抽取地热水,整改后用自来水代替温泉
  • 汪明荃,今生不负你
  • 首批18位!苏联籍抗日航空英烈信息更新
  • 花20万骑自行车?CityRide带火“骑行经济”
  • 碧桂园服务:拟向杨惠妍全资持有的公司提供10亿元贷款,借款将转借给碧桂园用作保交楼
  • 李云泽:支持设立新的金融资产投资公司,今天即将批复一家