知名互联网公司校招中常见的算法题(1-5)

本文介绍了几种常见的算法问题及其解决方案,包括使用动态规划求解最长回文子串,利用哈希表寻找两数之和,迭代法反转链表,递归计算二叉树最大深度,以及字符串转整数的处理策略。这些算法在面试和编程实践中具有重要意义。

题目一:最长回文子串

回文串是指正着读和反着读都一样的字符串。给定一个字符串,求出它的最长回文子串。

解决思路:

我们可以用动态规划来解决这个问题。我们先定义状态:dpi 表示从i到j是否为回文串。则有以下状态转移方程:

dp[i][j] = true (i == j)

dp[i][j] = (s[i] == s[j]) (j = i + 1)

dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1] (j > i + 1)

在这个状态转移方程中,如果 s[i] == s[j],那么 dpi 的值就取决于 dpi + 1 是否为 true。同时,如果 i 和 j 之间只有一个字符,那么它们必定是回文串。

最后,我们可以遍历 dp 数组,找出其中值为 true 的最长子串。

代码实现:

public String longestPalindrome(String s) {

  int n = s.length();

  boolean[][] dp = new boolean[n][n];

  String res = "";

  for (int i = n - 1; i >= 0; i--) {

      for (int j = i; j < n; j++) {

          dp[i][j] = s.charAt(i) == s.charAt(j) && (j - i < 2 || dp[i + 1][j - 1]);

          if (dp[i][j] && j - i + 1 > res.length()) {

              res = s
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值