面试题 17.05. 字母与数字

题目链接:面试题 17.05. 字母与数字

方法:TwoSum

解题思路

(1)将字符量化为 +1,数字量化为 1,那么当子数组的和subSum=0时,表示子数组中的字符和数字的数量相等;
(2)subSum=s[j]s[i]j>=ii=1,2,...s[i]表示前i个元素的和;
(3)即找s[j]s[i]=0,也即s[j]=s[i],且 (ji) is max

代码

class Solution {
public:
    vector<string> findLongestSubarray(vector<string>& array) {
        int n = array.size();
        int s = 0, mx_len = 0, l = 0;
        unordered_map<int, int> idx{{s, 0}};
        for (int i = 1; i <= n; i ++ ) {
            s += (array[i - 1][0] >> 6 & 1) * 2 - 1; // 字符 +1,数字 -1

            if (idx.count(s)) {
                int curlen = i - idx[s];
                if (curlen > mx_len) {
                    mx_len = curlen;
                    l = idx[s];
                }
            } else {
                idx[s] = i;
            }
        }
        
        return {array.begin() + l, array.begin() + l + mx_len};
    }
};
/*
关于array[i - 1][0] >> 6 & 1操作:
对于字母的ASCII码为 01xx xxxx,而数字的ASCII码为 0011 xxxx;
1、当字母执行上述操作后,结果为 1
2、当数字执行上述操作后,结果为 0
*/

复杂度分析

时间复杂度:O(n)
空间复杂度:O(n)

相关题目

1. 两数之和
1590. 使数组和能被 P 整除—题解:1590. 使数组和能被 P 整除(TwoSum !!!)

posted @   lixycc  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示