华为笔试

1、字符串重排

时间限制:C/C++ 1秒,其他语言 2s  空间限制:C/C++ 32768K,其他语言 65536K

题目描述

给你一个原始字符串,根据该字符串内每个字符出现的次数,按照ASCII码递增顺序重新调整输出。举例!假设原始字符串为:eeefgghhh

则每种字符串出现的次数分别是:(1)eee  3次;(2)f  1次;(3)gg  2次;(4)hhh  3次;

重排输出后的字符串如下:efghegheh

编写程序实现上述功能。

输入描述:eeefgghhh(原始字符串中仅可能出现数字和字母,请注意区分字母大小写)

输出描述:efghegheh

思路1:通过字典的方式存储字符串每个字符出现的次数,并按ASCII码递增顺序对字典进行排序。然后依次遍历字典,

使用setdefault()方法创建字典,setdefault()方法语法:

dict.setdefault(key, default=None)

 参数:key -- 查找的键值。

    default -- 键不存在时,设置的默认键值。

返回值:如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值。

class Solution:
    def rearrange_string(self, string):
        if not string:
            return None
        char_count = {}
        for char in string:
            char_count.setdefault(char, 0)
            char_count[char] += 1
        char_count = sorted(char_count.items(), key=lambda x: x[0])
        res = ‘‘
        while char_count:
            index = 0
            while index < len(char_count):
                val = char_count[index]
                if val[1] > 1:
                    res += val[0]
                    char_count[index] = (val[0], val[1] - 1])
                    index += 1
                elif val[1] == 1:
                    res += val[0]
                    del char_count[index]
                else:
                    del char_count[index]
        return res

if __name__ == "__main__":
    import sys
    while True:
        try:
            string = sys.stdin.readline().strip()
            print(Solution().rearrange_string(string))
        except:
            break

思路2:(1)将字符串去重并按ASCII码递增顺序进行排序存入char列表;

(2)用count列表存储对应字符出现的次数;

(3)通过zip将两张列表压缩并转为字典;

(4)通过char*maxCount重复遍历char列表,如果对应的count大于0则将该字符存入res,并进行count-1。

class Solution:
    def rearrange_string(self,string):
        if not string:
            return None
        char=list(sorted(set(string)))
        count=[]
        for c in char:
            count.append(string.count(c))
        char_count=dict(zip(char,count))
        maxCount=max(count)
        res=‘‘
        for i in char*maxCount:
            if char_count[i]>0:
                res+=i
                char_count[i]-=1
            else:
                continue
        return res

if __name__==‘__main__‘:
    while True:
        try:
            string=input()
            print(Solution().rearrange_string(string))
        except:
            break

  

2、跳跃比赛

时间限制:C/C++1秒,其他语言2秒     空间限制;C/++32768k,其他语言:65536K

题目描述

给出一组正整数,你从第一个数向最后一个数跳跃,每次至少跳跃一格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最小的跳跃次数跳到最后一个数。

输入描述:第一行表示有多少个数n,第二行开始依次是1到n个数,一个数一行

输出描述:输出一行,表示至少跳跃的次数

示例1

输入:

7

2

3

2

1

2

1

5

输出:

3

说明:7表示接下来要输入7个正整数,从2开始。数字本身代表可以跳跃的最大步长,此时有2种跳法,为2-2-2-5和2-3-2--5都为3步

思路1;

class Solution:
    def min_hops(self, steps):
        if not steps or len(steps) == 1:
            return 0
        cache = [0] * len(steps)
        cache[0] = 0

        arr_one_hop = [[] for i in range(len(steps))]
        for index, val in enumerate(steps):
            hop_floor = min(index + val, len(steps) - 1)
            for pos in range(index + 1, hop_floor + 1):
                arr_one_hop[pos].append(index)

        for index in range(1, len(steps)):
            all_hops = []
            while arr_one_hop[index]:
                all_hops.append(1+cache[arr_one_hop[index].pop()])
            cache[index] = min(all_hops)
        return cache[len(steps) - 1]

if __name__==‘__main__‘:
    while True:
        try:
            n = int(input())
            steps = [int(input()) for _ in range(n)]
            print(Solution().min_hops(steps))
        except:
            break

3、大数相乘

时间限制:C/C++1秒,其他语言2秒     空间限制;C/++32768k,其他语言:65536K

题目描述

编写“长整数相乘”程序,实现两个任意长度的长整数(正数)相乘,输出结果

输入描述:第一行输入数字A的字符串,字符范围(0-9),第二行输入数字B的字符串,字符范围(0-9)

输出描述:输出字符A、B两数相乘的结果,结果为字符串。

示例1:

输入:

1234

4321

输出:

5332114

说明

第一排数字*第二排数字

原文地址:https://www.cnblogs.com/hester-tang/p/8797047.html

时间: 2024-11-18 23:43:02

华为笔试的相关文章

华为笔试练习题----解析9进制,11进制的字符串为10进制的数字输出

                                                                              解析9进制,11进制的字符串为10进制的数字输出 描述: 解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,前面的00不算做有效位.解析后以10进制的数字输出.如果解析到非法字符串则返回-1 9进制: 9进制的数的范围:0,1,2,3,4,5,6,7,8 9进制的开始为:0V或者0

华为笔试——C++括号匹配

题目:括号匹配 题目来源:https://blog.csdn.net/lizi_stdio/article/details/76618908 题目介绍:输入一个字符串,里面可能包含"()"." [  ] "." {  } "三种括号,要求程序判断这个字符串里的括号是否成对出现且嵌套关系正确,若成对出现且嵌套关系正确,或字符串中无括号出现时,输出True:否则输出False.无需考虑非法输入. 例: 输入: (1+4)/[(2+3)*4] 输出:

【华为笔试】十六进制转换

java API有现成的函数,可以使用,下面用代码实现. [AC代码] 1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 while (sc.hasNext()) { 7 String str = sc.nextLine(); 8 String str1 = str.subst

华为笔试(2)

题目:输入包含数字 负号 小数点的一串字符,由若干整数字符串组成,以空格分割 比如123 -23.23 992 要求输出各个整数的和,包含小数点的数字去掉小数点以及小数点之后的数. 代码: import java.math.BigInteger; import java.util.Scanner; public class Main{ public static void main(String[] args) { BigInteger re=new BigInteger("0");

2017-08-23 华为笔试第二道编程题详解

[题目描述] 给定一个整数,给出消除重复数字以后最大的整数 输入描述 :正整数,注意考虑长整数 输出描述 : 消除重复数字后的最大整数 [示例1] 输入 : 423234 输出 : 432 [思路] 使用栈作为辅助工具,首先从前往后遍历数组 * 栈为空就压入栈 * 栈非空,判断当前数组元素是否大于栈顶元素 * 是 , 判断栈顶元素是否在后面的数组中存在,如果存在就弹出栈顶元素 * 判断栈中是否已经存在当前数组元素,否,将当前数组元素压入栈 [参考] http://www.cnblogs.com/

华为笔试算法题1

三道题目基本上都和字符串操作相关. 1. 给定一组元素个数不定的字符串数组,每个字符串的长度不定:请统计出该字符串数组中的英文字母子串.数字子串和其他字符子串的总数: 输出为以","符号分隔3个数值,分别代表英文字母子串.数字子串和其他字符子串的数量: 实现时无需考虑非法输入. 输入描述:输入为:字符串数组 例子:abcd1244!! BKMKLK0987% 输出描述:输出为以","符号分隔3个数值,分别代表英文字母子串.数字子串和其他字符子串的数量. 输入例子:a

华为笔试-嵌入式开发(一)

1)什么是预编译,何时需要预编译: 答案: 1.总是使用不经常改动的大型代码体. 2.程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项.在这种情况下,可以将所有包含文件预编译为一个预编译头. (2)char * const p      char const * p      const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,p的值不可以修改 char const * p://指向常量的指针,指向的常量值不可以改 cons

字符串压缩--华为笔试

二.题目描述(40分):通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串.压缩规则:1.仅压缩连续重复出现的字符.比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".2.压缩字段的格式为"字符重复的次数+字符".例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz". 要求实现函数: voi

字符串过滤--华为笔试

一.题目描述(60分):通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉.比如字符串“abacacde”过滤结果为“abcde”. 要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr); [输入] pInputStr:  输入字符串            lInputLen:  输入字符串长度       

华为笔试:计算字符个数

题目描述 写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 输入一个有字母和数字以及空格组成的字符串,和一个字符. 输出描述: 输出输入字符串中含有该字符的个数. 示例1 输入 ABCDEF A 输出 1 这道题可以说是非常简单了.但是ctype库确实可以多了解一下,有些时候空间可以节省很多时间isdigit(x):判断x是否为数字 isalnum() 用来判断一个字符是否为英文字母或数字,相当于 isalpha