力扣面试题 17.05. 字母与数字

这一道题和
力扣525.连续数组

思路一模一样。

都是把其中一种看作-1,另一种看作1,这样转化为找前缀和为0的子数组,比较简单,哈希表+前缀和解决

c++class 复制代码
public:
  int sum[100005];
unordered_map<int,int> mp;
vector<string> findLongestSubarray(vector<string>& array) {
        for(int i=0;i<array.size();i++)
        {
        	if(array[i][0]>='0'&&array[i][0]<='9')
        	{
        		sum[i+1]=sum[i]-1;
			}
			else
			{
				sum[i+1]=sum[i]+1;
			}
        
		}
		mp[0]=0;
		int l=0;
		int r=0;
		int llmax=0;
		int rrmax=0;
		int maxx=0;
		for(int j=1;j<=array.size();j++)
		{
			if(mp.count(sum[j]))
			{
				r=j;
				l=mp[sum[j]];
				if(r-l>maxx)
				{
					maxx=r-l;
					llmax=l;
					rrmax=r;
				}
			}
			else
			{
				mp[sum[j]]=j;
			}
		}
      
        return vector<string>(array.begin()+llmax,array.begin()+rrmax);
        
        
        
    }
};

但这一道题要注意的是返回值,如上代码写,比较方便,应该掌握

时间复杂度O(n)

相关推荐
lightqjx3 分钟前
【数据结构】复杂度分析
c语言·开发语言·数据结构·算法
DoraBigHead23 分钟前
🧠 小哆啦解题记——谁偷调了我的字母顺序?
算法
程序员小白条2 小时前
我的第二份实习,学校附近,但是干前端!
java·开发语言·前端·数据结构·算法·职场和发展
binnnngo3 小时前
Minmax 算法与 Alpha-Beta 剪枝小教学
算法·机器学习·剪枝
এ᭄画画的北北4 小时前
力扣-287.寻找重复数
算法·leetcode
黑听人10 小时前
【力扣 困难 C】329. 矩阵中的最长递增路径
c语言·leetcode
YuTaoShao12 小时前
【LeetCode 热题 100】141. 环形链表——快慢指针
java·算法·leetcode·链表
小小小新人1212313 小时前
C语言 ATM (4)
c语言·开发语言·算法
你的冰西瓜13 小时前
C++排序算法全解析(加强版)
c++·算法·排序算法
এ᭄画画的北北14 小时前
力扣-31.下一个排列
算法·leetcode