博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
华为笔试
阅读量:6096 次
发布时间:2019-06-20

本文共 3702 字,大约阅读时间需要 12 分钟。

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 resif __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 resif __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

你可能感兴趣的文章
Java面试题---代码题
查看>>
Python如何操作数据库?Python基础教程,第十四讲,数据库支持
查看>>
Git 删除远程仓库文件,并忽略提交文件
查看>>
win 2003 ftp
查看>>
我的友情链接
查看>>
Linux之命令学习小记
查看>>
Linux下各文件夹的含义及解释
查看>>
使用装饰器时带括号与不带括号的区别
查看>>
Android架构和特征
查看>>
第五十一课 NoSQL基础概念及MongoDB应用、数据库分配概念
查看>>
nginx 安装部署
查看>>
2012年的十一长假,一些想记录下来的情节
查看>>
linux命令--cal
查看>>
Axure 8.1.0.3381注册码
查看>>
awk数组、函数、脚本
查看>>
Win32项目与控制台应用的区别
查看>>
Unicode之痛
查看>>
负载均衡和应用优化基础
查看>>
iOS 富文本类库RTLabel
查看>>
通过USB over network解决USB设备共享问题
查看>>