[华为机试练习题]15.删除重复字符/删除重复字符串

题目

题目标题:

删除重复字符
给定一个字符串,将字符串中所有和前面重复多余的字符删除,其余字符保留,输出处理后的字符串。需要保证字符出现的先后顺序,并且区分大小写。
详细描述:

接口说明
原型:
int GetResult(const char *input, char *output)
输入参数:
     input     输入的字符串
输出参数(需考虑指针指向的内存区域是否有效):
    output    输出的字符串
返回值:
        0         成功
         -1        失败及异常
举例:
输入: abadcbad,那么该单词中红色部分的字符在前面已经出现过。
则:输出abdc,返回0。

知识点:
工程环境请使用VS2005

题目来源:    软件训练营
维护人:     d00191780
练习阶段:    初级

代码

/*---------------------------------------
*   日期:2015-06-30
*   作者:SJF0115
*   题目:删除重复字符/删除重复字符串
*   来源:华为上机
-----------------------------------------*/
#include <stdio.h>
#include <string.h>
/*
Description
         给定一个字符串,将字符串中所有和前面重复多余的字符删除,其余字符保留,输出处理后的字符串。需要保证字符出现的先后顺序。
Prototype
         int GetResult(const char *input, char *output)
Input Param
         input     输入的字符串
Output Param
         output    输出的字符串
Return Value
         0         成功
         -1        失败及异常
*/
int GetResult(const char *input, char *output)
{
    if(input == NULL || output == NULL){
        return -1;
    }//if
    int size = strlen(input);
    // 统计字符出现个数
    int hash[256] = {0};
    int index = 0;
    for(int i = 0;i < size;++i){
        // 判断之前是否出现过
        if(hash[input[i]] == 0){
            output[index++] = input[i];
        }//if
        ++hash[input[i]];
    }//for
    output[index] = '\0';
    return 0;
}
时间: 2025-01-08 12:30:46

[华为机试练习题]15.删除重复字符/删除重复字符串的相关文章

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

题目 描述: 题目描述: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排. 要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut); [输入] pstrIn:输入一个不带头节点的单向链表 [输出] pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请). [注意]只需要完成该函数功能算法,中

[华为机试练习题]61.找出字符串中第一个出现次数最多的字符

题目 描述: 找出字符串中第一个出现次数最多的字符 详细描述: 接口说明 原型: bool FindChar(char* pInputString, char* pChar); 输入参数: char* pInputString:字符串 输出参数(指针指向的内存区域保证有效): char* pChar:出现次数最多的字符 返回值: false 异常失败 true 输出成功 练习阶段: 初级 代码 /*--------------------------------------- * 日期:2015

[华为机试练习题]36.简单错误记录

题目 描述: 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理: 1. 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加: 2. 超过16个字符的文件名称,只记录文件的最后有效16个字符: 3. 输入的文件可能带路径,记录文件名称不能带路径. 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 一行或多行字符串.每行包括带路径文件名称,行号,以空格

[华为机试练习题]33.二叉搜索树

题目 描述: 判断两序列是否为同一二叉搜索树序列 题目类别: 树 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树. 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树. 输出: 如果序列相同则输出YES

[华为机试练习题]29.Arrange an Array to Form a Smallest Digit

题目 描述: Question: Input an array of positive integers, arrange the integers to form new digits, and output the smallest digit among all the new ones. Input Example 1: {2, 1} Output Example 1: 12 Input Example 2: {32, 321} Output Example 2: 32132 Input

[华为机试练习题]53.整数相除(AC 但还有bug)

题目 描述: 实现接口: /--------------------------------------------------------------------------------- Description : 整数相除. Input : unsigned int dividend :被除数,取值为无符号整数. unsigned int divisor: 除数,取值为无符号整数. Output : Char *pResult : 运算结果. Return Value : 0:成功: -1

[华为机试练习题]39.尼科彻斯定理

题目 描述: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和. 例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 题目类别: 循环 难度: 初级 运行时间限制: 无限制 内存限制: 无限制 阶段: 入职前练习 输入: 整数m(取值范围:1-100) 输出: 尼科彻斯定理成立,输出m个连续奇数(格式:"7+9+11"):否则输出-1 样例输入: 3 样例输出: 7+9+11 代码 /*---------------------

[华为机试练习题]1.周期串问题

题目一[周期串问题] 如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期.例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3).字符串的长度小于等于100,由调用者保证. 接口说明 原型: int GetMinPeriod(char *inputstring); 输入参数: char * inputstring:字符串 返回值: int 字符串最小周期 代码一 /*-----------------------------------

[华为机试练习题]32.数字基root

题目 描述: 求整数的Root:给定正整数,求每位数字之和;如果和不是一位数,则重复; 题目类别: 数组 难度: 初级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 输入任意一个或多个整数 输出: 输出各位数字之和,直到和为个位数为止(输入异常,则返回-1) 多行,每行对应一个输入数据的结果. 样例输入: 25 865 样例输出: 7 1 代码 /*--------------------------------------- * 日期:2015-07-0