首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

缩短计算二维数组中唯一字符数量的函数

可以通过以下步骤实现:

  1. 遍历二维数组,将所有字符存储在一个列表中。
  2. 使用集合(Set)数据结构,将列表中的字符去重,得到唯一字符集合。
  3. 创建一个字典(Dictionary),将唯一字符集合中的每个字符作为键,初始值为0。
  4. 再次遍历二维数组,对于每个字符,将字典中对应键的值加1。
  5. 创建一个新的列表,用于存储缩短后的字符。
  6. 再次遍历二维数组,对于每个字符,如果字典中对应键的值大于1,则将该字符替换为对应键的索引(即将字符缩短)。
  7. 返回缩短后的二维数组。

以下是一个示例的Python代码实现:

代码语言:txt
复制
def shorten_array(arr):
    char_list = []
    for row in arr:
        for char in row:
            char_list.append(char)
    
    unique_chars = set(char_list)
    char_dict = {char: 0 for char in unique_chars}
    
    for row in arr:
        for char in row:
            char_dict[char] += 1
    
    shortened_arr = []
    for row in arr:
        shortened_row = []
        for char in row:
            if char_dict[char] > 1:
                shortened_row.append(list(unique_chars).index(char))
            else:
                shortened_row.append(char)
        shortened_arr.append(shortened_row)
    
    return shortened_arr

这个函数的时间复杂度为O(n^2),其中n是二维数组的大小。它可以用于缩短计算二维数组中唯一字符数量的情况,例如文本压缩、数据加密等场景。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版(CDB):https://cloud.tencent.com/product/cdb
  • 云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ailab
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/iothub
  • 移动推送服务(信鸽):https://cloud.tencent.com/product/tpns
  • 对象存储(COS):https://cloud.tencent.com/product/cos
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/solution/virtual-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 高效备考方法-程序填空题

    1. 程序填空题占18分,一般有3个空需要填写; 2. 填空题做题之前必须弄清题目含义,抓住关键字,例如:要求对数组进行从小到大排序, 则将会出现大于符号,如果是从大到小排序则出现小于符号; 3. 填空题中出现频率最高的就是函数的调用、函数的首部、函数的返回值等和函数相关的问题,因此必须牢牢掌握函数的基本特征; 4. 填空题中有的“空”比较难,考生除了掌握必须的C语言知识之外,还需要很好的逻辑思路,如果一个空将花很多时间来解决,那么建议使用“死记硬背”的方法来缩短复习时间;(不建议所有题死记答案) 5. 上机题库中100多题,有部分题目是重复的或是相似的题目很多,同学们要使用比对的方法尽量去理解; 6. 多练习,多思考,多总结

    02

    c语言基础学习05_数组和字符串

    ============================================================================= 涉及到的知识点有:for循环有两种写法、数组、一维数组定义与使用、一维数组的初始化、 如何得到一个一维数组的成员数量、查找出一维数组中成员最大值、查找一维数组的第二大元素的值、 一维数组的逆置、一维数组排序:冒泡排序、二维数组、二维数组的初始化、三维数组初始化、三维数组排序、 字符串与字符数组、字符数组的初始化、字符数组的使用(以及字符数组和字符串的区别)、去除输出字符串结尾处的空格、 现在要去掉字符串最右面的空格,而不能去掉字符串中间的空格呢、随机数产生函数rand与srand、 自动的变种子、控制随机数的范围、用scanf来输入字符串、如何把两次输入的字符串放到新的字符串里去、 scanf缓冲区溢出的危险的解释、字符串的逆置。 ============================================================================= for循环有两种写法:

    02

    剑指offer-Go版实现 第二章:面试需要的基础知识

    leetcode题目实在太多了,找了半天还是回到这本10年前的书,题目数量不多,但是都比较经典,覆盖知识点比较广。开始参加leetcode周赛,做两题都是很难的,尤其是面对一堆大牛动不动四道题全做出来,很受刺激,真的是自惭形秽。狠下心来,只能自己慢慢研究一波,现在稳定两道题,偶尔还能突破三道题,这时候再重新回顾一遍剑指offer第二版,发现,以前死记硬背应对面试的东西,现在可以自己实现出来了。很多同学也说自己算法很差,有的甚至连数组和链表都分不清楚的,所以就试着分享,用GO语言重新实现一遍,也把涉及到的相关知识点一并讲解。

    02

    未禾的C语言总结

    **************************************************************************************************************************************************************************************************************** 操作符解释:     1,算术操作符:         ‘+’、‘-’、‘*’、‘/’、‘%’         %取模操作符只能用于整数,         /除法操作符,两个操作数均是整数时为整数除法,有一个是浮点数则执行浮点数除法。         如:int a = 6/5;//->a==1             double b = 6/5;//->b==1.000000             double c = 6.0/5//->c==1.200000,即实际运算与定义的储存类型无关     2,移位操作符         左移‘<<’、右移‘>>’         左移操作符:             如:   int a=2;                 int b = a << 1;//a向左移动一位,结果存入变量b中,结果b为4             正整数2在内存中存放的补码为:                                00000000000000000000000000000010             向左移动一位,左边的首位0去掉,右边的缺一位补0:00000000000000000000000000000100 ->4(十进制)         右移操作符:             右移时分为算数右移和逻辑右移。             算数右移:右边丢弃,左边补符号位。             逻辑右移:右边丢弃,左边补0。             如:int a = -10;                    int b = a >> 1;//a向右移动一位,结果存入变量b中             正整数10在内存中的补码为11111111111111111111111111110110//若为负数则原码与补码不同。             算术右移:             11111111111111111111111111111011 ->-5             逻辑右移:             01111111111111111111111111111011 ->2,147,483,643         对移位操作符移动负数位,这时C语言未定义的,不要使用。     3,位操作符         按位与‘&’、按位或‘|’、按位异或‘^’         位解释为二进制的一位。         &按位与,全为1时结果才为1,其他情况结果均为0             如:int a = 3;//        00000000000000000000000000000011                    int b = 5;//        00000000000000000000000000000101                    int c = a & b;//    00000000000000000000000000000001->1(十进制)             eg:找出一个整数的二进制的1的个数。                 #include <stdio.h>                 int main(){                 int a=1;                 int cnt=0;                 for(int i=0; i<31; i++){                     if((a&1) == 1){//整数的二进制数的1的个数                          cnt++;                     }                     a=a >> 1;                 }                 printf("%d\n",cnt);                 return 0;             }          |按位或,全为0时结果才为0,其他情况结果均为1             如:int a = 3;//    000

    01

    【C语言】指针进阶

    官方解释: C/C++会把常量字符串存储到单独的⼀个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。 分析: 我们可以看到字符串是一样的,为hello world,str1和str2不同,str3和str4相同,我们可以看到str3和str4的char*有const修饰,str1和str2没有,因此我们得出的结论就是:有const修饰的字符串str3和str4,计算机会将其认为是一种字符常量,相同的常量会被计算机存放到同一个地址里,所以二者相同;str1和str2是变量,被存放再不同的地址里边了,所以两者不同(这也优化了底层的运行,其实计算机每一种规则都是为了简化过程,减少资源的浪费)

    01
    领券