zoukankan      html  css  js  c++  java
  • 字符串的移位(要求空间为1,使用翻转的方法)

    定义字符串的左旋转操作:把前面若干个移动到尾部。
    如把字符串 abcdef左旋转 2位得到字符串 cdefab。
    请实现字符串左旋转的函数要求时间对长度为 n的字符串操作复杂度为 O(n),辅助内存为 O(1)。

    分析:把字符串看成有两段组成的,记位XY。左旋转相当于要把字符串XY 变成YX。
    我们先在字符串上定义一种翻转的操作,就是翻转字符串中字符的先后顺序。把X 翻转后
    记为XT。显然有(XT)T=X。
    我们首先对X 和Y 两段分别进行翻转操作,这样就能得到XTYT。
    接着再对XTYT 进行翻转操作,得到(XTYT)T=(YT)T(XT)T=YX。正好是我们期待的结果。

    #include<iostream>
    using namespace std;
    void reverse(char *str,int n)
    {
    	char *start=str,*end=str+n-1;
    	while(start<end)
    	{
    		char c=*start;
    		*start=*end;
    		*end=c;
    		start++;
    		end--;
    	}
    }
    int main()
    {
    	char string[100];int n;
    	while(cin>>string>>n)
    	{
    		reverse(string,n);
    		reverse(string+n,strlen(string)-n);
    		reverse(string,strlen(string));
    		cout<<string<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    LinqExtensions
    CsvWriter
    循环遍历清理Kubernetes中异常的pod
    Kubernetes存储——rook-ceph
    Kubernetes存储——glusterfs(集群)
    Linux环境变量配置
    Kubernetes存储——ceph(集群)
    Kubernetes存储——NFS
    Kubernetes 亲和性调度
    ceph集群运维
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2735526.html
Copyright © 2011-2022 走看看