208 数组中的最长山脉和最长回文串

文章讲述了如何在给定的整数数组中找到最长的山脉(满足特定递增和递减条件的子数组)以及如何处理含有大小写字母的字符串,构造出最长的区分大小写的回文串。解决方案涉及遍历数组计算上升和下降序列,以及利用哈希映射统计字符出现次数来确定回文子串长度。

问题描述:我们把数组A中符合下列属性的任意连续子数组B称为山脉:
B.length>=3,存在0<i<j<B.length-1使得
B[i]<B[i+i]<B[i+2]...>B[j],给出一个整数数组A,返回最长山脉的长度。

求解思路:先找到上升数组的个数,在找到下降数组的个数。并用index为0表示寻找上升数组,index=1表示寻找下降数组。

public int mountainArray(int []nums)
{
int index=0;
int longest=1;
int currentLength=1;
for(int i=1;i<nums.length;i++)
{
if(index==0)
{
if(nums[i]>nums[i-1]){currentLength++;}else{index=1;i--;}

}else
{
if(nums[i]<nums[i-1]){currentLength++;}
else{longest=Math.max(longest,currentLength);index==0;i--;}
}
}
return longest;
}

问题描述:给定一个包含大写字母和小写字母的字符串,找到通过这些字母狗造成的最长的回文串,在构造过程中,请注意区分大小写,比如Aa不能当做一个回文字符串。例如输入"abccccdd"输出7,可以够早的最长的回文串是"dccaccd",他的长度是7.

求解思路:只要字母的个数是偶数就一定能变成回文子串。最后可以在中间在放入一个奇数元素即可。可以使用map进行装填,也可以使用数组

public int palia(String s)
{
Map<Integer,Integer>map=new HashMap<>();
for(int i=0;i<s.length();i++)
{
map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
}
int number=0;
for(Map.Entry<Integer,Integer> entry:map.entrySet())
{
if(entry.getValue()%2==0){number++entry.getValue();}
}
return number==s.length()?number:number+1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值