初学小白C/C++语言知识难点题目总结(代码演示)

本文汇总了C/C++编程中的一些经典算法问题,包括字符串最长回文子串、两数之和、链表加法、三数之和以及atoi函数的实现,每个问题都提供了详细的解决方案和O(n^2)到O(n)的复杂度分析,通过代码演示帮助初学者理解算法思想。
摘要由CSDN通过智能技术生成

一、给定一个字符串,返回它的最长回文子串。如果存在多个答案,返回任意一个即可。字符串长度 ≤≤ 1000。

算法:(暴力枚举)O(n2)O(n2)

由于字符串长度小于1000,因此我们可以用 O(n2)O(n2) 的算法枚举所有可能的情况。

首先枚举回文串的中心 ii,然后分两种情况向两边扩展边界,直到遇到不同字符为止:

  • 回文串长度是奇数,则依次判断 s[i−k]==s[i+k],k=1,2,3,…s[i−k]==s[i+k],k=1,2,3,…
  • 回文串长度是偶数,则依次判断 s[i−k]==s[i+k−1],k=1,2,3,…s[i−k]==s[i+k−1],k=1,2,3…

如果遇到不同字符,则我们就找到了以 ii 为中心的回文串边界。

时间复杂度分析:一共两重循环,所以时间复杂度是 O(n2)O(n2)。

C++代码演示:


```css
class Solution {
   
public:
    string longestPalindrome(string s) {
   
        int res = 0;
        string str;
        for (int i = 0; i < s.size(); i ++ )
        {
   
            for (int j = 0; i - j >= 0 && i + j < s.size(); j ++ )
                if (s[i - j] == s[i + j])
                {
   
                    if (j * 2 + 1 > res)
                    {
   
                        res = j * 2 + 1;
                        str = s.substr(i - j, j * 2 + 1);
                    }
                }
                else break;

            for (int j = i, k = i + 1; j >= 0 && k 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值