字符串移位(C语言实现,面试题目)
2015-03-24 21:12
225 查看
题目:编写程序,在原字符串中把字符串尾部的m个字符移动到字符串的头部,要求:长度为n的字符串操作时间复杂度为O(n),空间复杂度为O(1)。 例如,原字符串为”Ilovebaofeng”,m=7,输出结果为:”baofengIlove”。
思路:借鉴了July的旋转字符串的思路。分别将字符串的两部分逆序,然后再对整个字符串逆序。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void RotateString(char *str, int from, int to);
void ShiftSubString(char* str, int m, int n);
int main()
{
int k,len;
char str[1000];
printf("input a string:\n");
scanf_s("%s", str,1000);
len = strlen(str);
printf("input k:\n");
scanf_s("%d", &k);
ShiftSubString(str, k, len);
puts(str);
system("pause");
return 0;
}
void RotateString(char *str,int from, int to)
{
char temp;
while (from<to)
{
temp = str[from];
str[from++] = str[to];
str[to--] = temp;
}
}
void ShiftSubString(char *str, int k, int len)
{
RotateString(str, 0, len-k-1);
RotateString(str, len-k, len-1);
RotateString(str, 0, len-1 );
}时间复杂度O(n),空间复杂度O(1)。
思路:借鉴了July的旋转字符串的思路。分别将字符串的两部分逆序,然后再对整个字符串逆序。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void RotateString(char *str, int from, int to);
void ShiftSubString(char* str, int m, int n);
int main()
{
int k,len;
char str[1000];
printf("input a string:\n");
scanf_s("%s", str,1000);
len = strlen(str);
printf("input k:\n");
scanf_s("%d", &k);
ShiftSubString(str, k, len);
puts(str);
system("pause");
return 0;
}
void RotateString(char *str,int from, int to)
{
char temp;
while (from<to)
{
temp = str[from];
str[from++] = str[to];
str[to--] = temp;
}
}
void ShiftSubString(char *str, int k, int len)
{
RotateString(str, 0, len-k-1);
RotateString(str, len-k, len-1);
RotateString(str, 0, len-1 );
}时间复杂度O(n),空间复杂度O(1)。
相关文章推荐
- 面试珠玑 C语言实现字符串倒序
- C语言字符串面试题目总结
- C语言学习序列之面试题目-计算两个字符串中出现的相同英文字符
- 链表翻转(面试题目 C语言实现)
- 【面试算法系列】替换字符串中的空格为其他字符 - C语言实现
- C语言字符串库函数的实现也是笔试题常考的题目,以下代码没有严格测试,只是简单的实现:
- 程序员代码面试指南:IT名企算法与数据结构题目最优解-字符串问题:C/C++语言实现
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回...
- C语言面试题目(3)
- 一道字符串复制的面试题目
- C语言实现字符串拷贝函数char *strcpy(char *dest, const char *src)
- 【面试题目】string类实现
- 【题目12】用C语言实现memmove函数
- 面试题目(2)——转换字符串-插入字符个数
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 如何在C语言使用位运算实现循环移位
- 【面试题目】-C++中判断字符串是否全部由数字组成
- C语言面试题目(2)
- 教你如何在C语言使用位运算实现循环移位
- 用C语言实现将一整型数字转化成为字符串