[DLdigest-6] 每日一道算法

2017 年 10 月 29 日 深度学习每日摘要 DLdigest

题图:A sculpture in New Zealand designed to look like a cartoon

在上一期的每日一道算法中,题目是给定一个字符串s,找出其中最长的子回文字符串,假定s的最大长度为1000。

首先说明一下什么是回文字符串,其定义就是如果一个字符串从左向右读与从右向左读是一模一样的,那么它就是回文字符串,如"aa"、"aba"、"a"都属于回文字符串。假设s为”babad”,那么其最大子回文字符串就是”bab”,或者也可以说是”aba”,它们长度一样;假设s为”cbbd”,那么其最大子回文字符串就是”bb”。

如果字符串s的长度为1,那么它本身就是回文字符串,因此返回本身即可。除此之外,还要注意的是回文字符串的长度可以为奇数也可以为偶数,如果长度为奇数,那么字符串就是以中心字符为对称点,而如果长度为偶数,那么就是以字符串中某两个字符为中心的对称。

具体的求解突破口就是要找子回文字符串的开始位置及其长度,然后调用substr来得到该回文字符串。

#include<iostream>
using namespace std;

class Solution {
public:    
   string findMaxPlalindrome(string s) {
       //返回字符串本身        if(s.size()<=1)
           return s;
       int start=0, len=0;
       int left, right;
       for(int i=0; i<s.size()-1; i++) {
           //长度为奇数            left=i;            right=i;
           while(left>=0 && right<s.size() && s[left]==s[right]) {                left--;                right++;            }
           if((right-left-1)>len) {                start=left+1;                len=right-left-1;            }
           
           //长度为偶数            left=i;            right=i+1;
           while(left>=0 && right<s.size() && s[left]==s[right]) {                left--;                right++;            }
           if((right-left-1)>len) {                start=left+1;                len=right-left-1;            }        }        
       return s.substr(start, len);    } };
       
int main() {
   string s1("abbc");
   string s2("abcbd");
   string s3("abcd");
   string s4("a");    Solution s;
   cout<<s1<<"-->"<<s.findMaxPlalindrome(s1)<<endl;
   cout<<s2<<"-->"<<s.findMaxPlalindrome(s2)<<endl;
   cout<<s3<<"-->"<<s.findMaxPlalindrome(s3)<<endl;
   cout<<s4<<"-->"<<s.findMaxPlalindrome(s4)<<endl;
   return 0; } 运行结果: abbc-->bb abcbd-->bcb abcd-->a a-->a

每日一道算法——ZigZag Conversion
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

And then read line by line: “PAHNAPLSIIGYIR”
Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);
convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.

如果看不懂题意的话,再看下图就明白了。

近期将以NLP领域论文分享及注意力机制的代码实践为主,每天一道算法会保持更新。欢迎大家留言分享深度学习知识或交流每日一道算法的思路,本期算法的解决方法将在下一期中讲解。


你可能会感兴趣的文章有:

[DLdigest-1] 有人用量子场论来解释深度神经网络

[DLdigest-2] AlphaGo Zero是自由的

[DLdigest-3] Python中让你无法预测的“是”

[DLdigest-4] 每日一道算法

[DLdigest-5] 每日一道算法

动态层归一化(Dynamic Layer Normalization)

端对端的深度卷积神经网络在语音识别中的应用

SampleRNN语音合成模型

详述DeepMind wavenet原理及其TensorFlow实现

Layer Normalization原理及其TensorFlow实现

Batch Normalization原理及其TensorFlow实现

Maxout Network原理及其TensorFlow实现

时延神经网络(TDNN)原理及其TensorFlow实现

ConvLSTM原理及其TensorFlow实现

Network-in-Network原理及其TensorFlow实现

如何基于TensorFlow实现ResNet和HighwayNet

语音识别领域三十年来重要论文合集及其下载地址

推荐阅读 | 如何让TensorFlow模型运行提速36.8%

推荐阅读 | 如何让TensorFlow模型运行提速36.8%(续)

深度学习每日摘要|坚持技术,追求原创

微信ID:deeplearningdigest
长按二维码关注我
登录查看更多
0

相关内容

在数学和计算机科学之中,算法(Algorithm)为一个计算的具体步骤,常用于计算、数据处理和自动推理。精确而言,算法是一个表示为有限长列表的有效方法。算法应包含清晰定义的指令用于计算函数。 来自维基百科: 算法
打怪升级!2020机器学习工程师技术路线图
专知会员服务
99+阅读 · 2020年6月3日
Transformer文本分类代码
专知会员服务
117+阅读 · 2020年2月3日
强化学习最新教程,17页pdf
专知会员服务
177+阅读 · 2019年10月11日
2019年机器学习框架回顾
专知会员服务
36+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
94+阅读 · 2019年10月10日
基于attention的seq2seq机器翻译实践详解
黑龙江大学自然语言处理实验室
11+阅读 · 2018年3月14日
机器学习线性代数速查
机器学习研究会
19+阅读 · 2018年2月25日
爬了自己的微信,原来好友都是这样的!
七月在线实验室
4+阅读 · 2018年1月18日
AI 玩跳一跳的正确姿势,跳一跳 Auto-Jump 算法详解
Python开发者
5+阅读 · 2018年1月16日
关关的刷题日记90 – Leetcode 400. Nth Digit
专知
3+阅读 · 2018年1月8日
动手写机器学习算法:SVM支持向量机(附代码)
七月在线实验室
12+阅读 · 2017年12月5日
[DLdigest-8] 每日一道算法
深度学习每日摘要
4+阅读 · 2017年11月2日
【音乐】Attention
英语演讲视频每日一推
3+阅读 · 2017年8月22日
Talking-Heads Attention
Arxiv
15+阅读 · 2020年3月5日
A Sketch-Based System for Semantic Parsing
Arxiv
4+阅读 · 2019年9月12日
Arxiv
6+阅读 · 2019年4月8日
Music Transformer
Arxiv
5+阅读 · 2018年12月12日
Arxiv
4+阅读 · 2018年10月31日
Next Item Recommendation with Self-Attention
Arxiv
5+阅读 · 2018年8月25日
VIP会员
相关VIP内容
打怪升级!2020机器学习工程师技术路线图
专知会员服务
99+阅读 · 2020年6月3日
Transformer文本分类代码
专知会员服务
117+阅读 · 2020年2月3日
强化学习最新教程,17页pdf
专知会员服务
177+阅读 · 2019年10月11日
2019年机器学习框架回顾
专知会员服务
36+阅读 · 2019年10月11日
机器学习入门的经验与建议
专知会员服务
94+阅读 · 2019年10月10日
相关资讯
基于attention的seq2seq机器翻译实践详解
黑龙江大学自然语言处理实验室
11+阅读 · 2018年3月14日
机器学习线性代数速查
机器学习研究会
19+阅读 · 2018年2月25日
爬了自己的微信,原来好友都是这样的!
七月在线实验室
4+阅读 · 2018年1月18日
AI 玩跳一跳的正确姿势,跳一跳 Auto-Jump 算法详解
Python开发者
5+阅读 · 2018年1月16日
关关的刷题日记90 – Leetcode 400. Nth Digit
专知
3+阅读 · 2018年1月8日
动手写机器学习算法:SVM支持向量机(附代码)
七月在线实验室
12+阅读 · 2017年12月5日
[DLdigest-8] 每日一道算法
深度学习每日摘要
4+阅读 · 2017年11月2日
【音乐】Attention
英语演讲视频每日一推
3+阅读 · 2017年8月22日
相关论文
Top
微信扫码咨询专知VIP会员