21xrx.com
2024-11-10 00:23:45 Sunday
登录
文章检索 我的文章 写文章
C++初学者必备:oj题库1029答案
2023-07-04 23:02:36 深夜i     --     --
C++ 初学者 oj题库1029 必备 答案

对于C++语言的初学者来说,熟练掌握基础语法和常见算法是必不可少的,而做一些在线的编程题目则是一个不错的练手之法。其中oj题库1029是一个比较好的选择,下面我们就来看看它的一道典型题目及答案。

题目描述:

给定一个字符串,算出它的最长回文子串。回文串是指从左往右, 从右往左读都是同一个字符串。例如输入字符串“ababc”,则其最长回文子串为“aba”。

输入:

输入文件只包含一个测试用例,该用例只包含一个长度不超过1000的字符串,字符串中只可能包含数字、大小写字母等ASCII码为[32,126]的可见字符。

输出:

输出文件中只有一行,一个字符串表示输入字符串的最长回文子串。

样例:

输入:ababc

输出:aba

解题思路:

对于这道题,第一时间就要想到的是中心扩展法。具体实现就是从字符串中的每一个位置出发,分别向左和向右扩展,直到无法继续扩展或者不是回文串为止。最后取所有回文子串的最大值。

C++代码实现:

#include

using namespace std;

class Solution {

public:

  string longestPalindrome(string s) {

    int n = s.size();

    int len = 0, st = 0;

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

      int l = i - 1, r = i + 1;

      while (l >= 0 && r < n && s[l] == s[r]) l--, r++;

      if (r - l - 1 > len) len = r - l - 1, st = l + 1;

      l = i, r = i + 1;

      while (l >= 0 && r < n && s[l] == s[r]) l--, r++;

      if (r - l - 1 > len) len = r - l - 1, st = l + 1;

    }

    return s.substr(st, len);

  }

};

int main()

{

  Solution s;

  string str;

  cin >> str;

  cout< <

  return 0;

}

运行结果:

输入:ababc

输出:aba

总结:

不管你是初学者还是已经有一定经验的程序员,都需要不断学习和实践。做题不仅可以检验自己的知识掌握情况,还可以帮助你加深对某种算法或数据结构的理解,提高心理素质和代码能力。希望大家都能在编程的世界里不断进步!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复