[leedcode][409][java]

####【题目描述】

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。注意:
假设字符串的长度不会超过 1010。示例 1:输入:
"abccccdd"输出:
7

解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

贪心

class Solution {public int longestPalindrome(String s) {int[] count = new int[128];for (char c: s.toCharArray())count[c]++;int ans = 0;for (int v: count) {ans += v / 2 * 2;if (v % 2 == 1 && ans % 2 == 0)ans++;}return ans;}
}
int数组实现
class Solution {public int longestPalindrome(String s) {int[] cnt = new int[58];for (char c : s.toCharArray()) {cnt[c - 'A'] += 1;}int ans = 0;for (int x: cnt) {// 字符出现的次数最多用偶数次。
//如果 x 是奇数,x & 1 的结果就是1,偶数就是0,实现了偶数不变、奇数减1的逻辑
// (x >> 1) << 1 ,先右移一位去掉最末位的0或1,再左移一位,也实现了偶数不变、奇数减1的逻辑。ans += x - (x & 1);}// 如果最终的长度小于原字符串的长度,说明里面某个字符出现了奇数次,那么那个字符可以放在回文串的中间,所以额外再加一。return ans < s.length() ? ans + 1 : ans;  }
}
Java8的流式风格
class Solution {public int longestPalindrome(String s) {
//s.chars()的返回值是一个 IntStream,就是Int的流;.boxed()会装箱返回Stream<Integer>;.collect()是聚合的算子,Collectors.toMap的三个参数分别是 keyMapper,valueMapper 和 mergeFunction。分别表示聚合出来的 Map 的 key 是什么,value 是什么,如果遇到key相同的,怎么合并值。
//Map<Integer, Integer> count = s.chars().boxed().collect(Collectors.toMap(k -> k, v -> 1, Integer::sum));
// counter.values() 返回的是map值的集合Collection<Integer>,先用.stream()转成流以后,利用mapToInt 转成 IntStream,因为 IntStream 是支持 sum 算子的,通过sum算子进行求和。int ans = count.values().stream().mapToInt(i -> i - (i & 1)).sum();return ans < s.length() ? ans + 1 : ans;}
}
Hashmap
class Solution {public int longestPalindrome(String s) {if (s == null) return 0;Map<Character, Integer> map = new HashMap<>();for (int i = 0; i < s.length(); i++){if (map.containsKey(s.charAt(i))){map.replace(s.charAt(i), map.get(s.charAt(i)) + 1);} else {map.put(s.charAt(i), 1);}}int result = 0;for (Map.Entry<Character, Integer> entry : map.entrySet()){if (entry.getValue() % 2 == 0) {result += entry.getValue();} else {result += entry.getValue() - 1;}}if (result < s.length()) result++;return result;}
}

####【总结】

  1. 取模运算转化(正数)
  • 取模是一个消耗较大的操作,因此大多数语言的编译器比如C++都对模运算进行了优化
  • Java中是不存在无符号整型的,数字是用补码来表示的(最高位是符号位,0表示正数,1表示负数)
//正数能优化 负数不能优化
int a = -3 % 2; // -1
int b = -3 & 1; // 1
x = 87;
x % 2 = x & (2 - 1) = 1010111 & 1 = 1 = 1;
x % 4 = x & (4 - 1) = 1010111 & 11 = 11 = 3;
x % 8 = x & (8 - 1) = 1010111 & 111 = 111 = 7;
x % 16 = x & (16 - 1) = 1010111 & 1111 = 111 = 7;
x % 32 = x & (32 - 1) = 1010111 & 11111 = 10111 = 2
  1. 一题多解,多思考,不要总想遍历,否则很难进步

资料参考整理来自:https://mp.weixin.qq.com/s/HtDYSfaikwHozUrksU0A1w

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转oracle 11g(35):rman备份-参数文件spfile损坏恢复

1.参数文件spfile损坏恢复 (1)选择“开始”“运行”&#xff0c;输入cmd&#xff0c;按回车。 (2)输入“ set oracle_siddocare”&#xff0c;按回车。 &#xff08;oracle_sid根据实际名称填写&#xff09; (3)输入“rman target /”&#xff0c;按回车 如果在64bit下安装…

python获取页面隐藏元素_selenium操作隐藏的元素(python+Java)

有时候我们会碰到一些元素不可见&#xff0c;这个时候selenium就无法对这些元素进行操作了。例如&#xff0c;下面的情况&#xff1a;Python页面主要通过“display:none”来控制整个下拉框不可见。这个时候如果直接操作这个下拉框&#xff0c;就会提示&#xff1a;from seleniu…

docker 配置文件:/etc/docker/daemon.json

/etc/docker/daemon.json 是 docker 的配置文件&#xff0c;默认是没有的&#xff0c;需要我们手动创建&#xff0c;可配置项如下&#xff1a; [rootlocalhost ~]$ vim /etc/docker/daemon.json {"authorization-plugins": [],"data-root": "", …

[leedcode][JAVA][365][BFS]

【问题描述】 有两个容量分别为 x升 和 y升 的水壶以及无限多的水。请判断能否通过使用这两个水壶&#xff0c;从而可以得到恰好 z升 的水&#xff1f;如果可以&#xff0c;最后请用以上水壶中的一或两个来盛放取得的 z升 水。你允许&#xff1a;装满任意一个水壶 清空任意一个…

玩转oracle 11g(36):rman备份-控制文件丢失恢复

ORA-00205: error in identifying control file, check alert log for more info 检查oracle的报警日志包含类似报错&#xff1a; ORA-00210: cannot open the specified control file ORA-00202: control file: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOCARE\C ONTROL01.CTL OR…

=在 java中怎么表示_在Java中各种类型运算符的介绍与其基本使用方式(有具体使用示例)...

一.算数运算符基本四则运算符 - * / %(使用规则简单&#xff0c;正常使用即可)注意事项&#xff1a;a) int/int 结果还是 int 要保留小数需要使用double来计算int a 1;int b 2;System.out.println(a/b);//结果为0b)0不能作为出除数c)%表示取余不仅仅可以对int求模&#xff0…

【旧文章搬运】无Device的驱动如何通信

原文发表于百度空间&#xff0c;2009-07-14 标准的驱动与ring3的通信过程是这样的&#xff1a;驱动中创建设备&#xff0c;并为设备创建符号链接&#xff0c;ring3用CreateFile打开符号链接得到设备句柄&#xff0c;然后DeviceIoControl发送ControlCodeDeviceIoControl的内容被…

[Leedcode][JAVA]第[945]题

【问题描述】 给定整数数组 A&#xff0c;每次 move 操作将会选择任意 A[i]&#xff0c;并将其递增 1。返回使 A 中的每个值都是唯一的最少操作次数。示例 1:输入&#xff1a;[1,2,2] 输出&#xff1a;1 解释&#xff1a;经过一次 move 操作&#xff0c;数组将变为 [1, 2, 3]。…

玩转oracle 11g(37):rman备份-数据库指定文件恢复

.数据库指定数据文件恢复 启动数据库的时候报错 ORA-01157: cannot identify/lock data file 5 - see DBWR trace file ORA-01110: data file 5: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DOCARE\AP MEDCOMM.DBF ORA-27041: unable to open file OSD-04002: 无法打开文件 O/S-Erro…

java xpath 解析xml_使用XPATH解析XML文件

使用XPATH解析XML文件import java.util.Iterator;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Node;import org.dom4j.io.SAXReader;public class TestXPath {public static void main(String[] args) throws Docum…

并发编程-concurrent指南-原子操作类-AtomicBoolean

类AtomicBoolean 可以用原子方式更新的 boolean 值。有关原子变量属性的描述&#xff0c;请参阅 java.util.concurrent.atomic 包规范。AtomicBoolean 可用在应用程序中&#xff08;如以原子方式更新的标志&#xff09;&#xff0c;但不能用于替换 Boolean。 2.构造函数 1.Atom…

[剑指offer]面试题第[7]题[JAVA][斐波那契数列][递归]

【问题描述】 大家都知道斐波那契数列&#xff0c;现在要求输入一个整数n&#xff0c;请你输出斐波那契数列的第n项&#xff08;从0开始&#xff0c;第0项为0&#xff09;。 n<39 【解答思路】 1.递归&#xff08;面试避免&#xff09; O(n^2) public class Solution {pu…

JVM 内存设置大小(Xms Xmx PermSize MaxPermSize 区别)

Eclipse崩溃&#xff0c;错误提示&#xff1a;MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommendedthat you exit and restart MyEclipse with new virtual machine memoryparamters to increase …

玩转oracle 11g(38):rman备份-全库恢复

(1)选择“开始” “运行”&#xff0c;输入cmd&#xff0c;按回车。 (2)输入“ set oracle_sidorcl”&#xff0c;按回车。 &#xff08;oracle_sid根据自己库的设置写&#xff09; (3)输入“rman target /”&#xff0c;按回车 (4)关闭数据库。输入“shutdown immediate;”…

[Leedcode][JAVA][第876题][快慢指针]

【问题描述】 给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;[1,2,3,4,5] 输出&#xff1a;此列表中的结点 3 (序列化形式&#xff1a;[3,4,5]) 返回的结…

玩转oracle 11g(39):oracle11g密码过期后的解决方法

在使用oracle11g数据库的过程中经常会遇到密码180天过期的问题&#xff0c;这是因为oracle11g中默认在default概要文件中设置了“PASSWORD_LIFE_TIME180天”导致的&#xff0c;在此分享一个比较好用的解决办法 1、查看用户的proifle是哪个&#xff0c;一般是default&#xff1…

Django补充

django页面渲染具体流程 在django的页面渲染中&#xff0c;下面这段程序 def test1(request):return render(request,aa.html,{data:wusir}) 等同于 from django.template import loader def test1(request):html loader.get_template(aa.html)html_str html.render({data:wu…

算法复杂度-BigO表示法

1.时间复杂度--大O表示法 算法的渐进时间复杂度&#xff0c;T(n)O(f(n)) T&#xff08;n&#xff09;表示算法的渐进时间复杂度 f&#xff08;n&#xff09;表示代码执行的次数 O&#xff08;&#xff09;表示正比例关系 2.常用的时间复杂度量级 3.举例 &#xff08;1&am…

java代码连接redis_java代码连接redis

需要的maven依赖redis.clientsjedis2.9.0代码&#xff1a;package yofc;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import java.net.URI;public class demo {private static JedisPool pool null;/…

[Leedcode][JAVA][按摩师][动态规划]

【问题描述】 一个有名的按摩师会收到源源不断的预约请求&#xff0c;每个预约都可以选择接或不接。在每次预约服务之间要有休息时间&#xff0c;因此她不能接受相邻的预约。给定一个预约请求序列&#xff0c;替按摩师找到最优的预约集合&#xff08;总预约时间最长&#xff0…