zoukankan      html  css  js  c++  java
  • 数据结构——算法之(029)( 字符串原地压缩)

    【申明:本文仅限于自我归纳总结和相互交流。有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】

    题目:

    字符串原地压缩,题目描写叙述:"eeeeeaaaff" 压缩为"e5a3f2",请编程实现
    题目分析:

    1、原地压缩,意思是不开辟额外的空间

    2、应该考虑单个字符不压缩,比方‘q’压缩过后还是‘q’,而不应该是‘q1’

    3、压缩后某个字符个数是多位数,

    算法实现:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    char *str_res(char *str)
    {
    	char t;
    	char *begin = str;
    	char *end = str + strlen(str) - 1;
    	while(begin < end)
    	{
    		t = *begin;
    		*begin++ = *end;
    		*end-- = t;
    	}
    	return str;
    }
    
    char *int_to_str(int num)
    {
    	char *str = calloc(1, 16);
    	char *s = str;
    	while(num)
    	{
    		*str++ = num%10 + '0';
    		num /= 10;
    	}
    	*str = '';
    	return str_res(s);
    }
    
    char *str_compress(char *str)
    {
    	char tmp;
    	char *fast = str;
    	char *slow = str;
    	char *r = str;
    	
    	int count = 0;
    	while(*fast != '')
    	{
    		tmp = *fast++;
    		while(*fast == tmp  && *fast != '')
    			fast++;
    		
    		*r++ = *(fast-1);
    		count = fast - slow;
    		if(count != 1)
    		{
    			char *st = int_to_str(count);
    			strcpy(r, st);
    			r = r + strlen(st);
    			free(st);
    		}
    		slow = fast;
    	}
    	*r = '';
    	return str;
    }
    
    int main(int argc, char *argv[])
    {
    	printf("%s-------->", argv[1]);
    	printf("%s
    ", str_compress(argv[1]));
    	return 0;
    }
    


  • 相关阅读:
    WebSocket简单使用
    viewport 的基本原理以及使用
    Markdown基本语法总结
    emmet 工具的基本使用,总结
    在idea中把项目上传到GitHub库中
    Git Bash命令汇总
    用github创建自己的存储库并把文件推送到远程库中
    之前编写的Symfony教程已经可以观看了
    Symfony路由配置教程已开课
    Symfony原创视频教程
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5062973.html
Copyright © 2011-2022 走看看