字符串处理:最长回文子串,正着读,反着读都一样就是回文

字符串处理:最长回文子串,正着读,反着读都一样就是回文
基本思路是对任意字符串,如果头和尾相同,那么它的最长回文子串一定是去头去尾之后的部分的最长回文子串加上头和尾。如果头和尾不同,那么它的最长回文子串是去头的部分的最长回文子串和去尾的部分的最长回文子串的较长的那一个。 P[i,j]P[i,j]表示第i到第j个字符的回文子串数 dp[i,i]=1dp[i,i]=1 dp[i,j]=dp[i+1,j−1]+2|s[i]=s[j]dp[i,j]=dp[i+1,j−1]+2|s[i]=s[j] dp[i,j]=max(dp[i+1,j],dp[i,j−1]...

字符串处理:最长公共字串

字符串处理:最长公共字串
字符串处理:最长公共字串 python # coding: utf-8 # 字符串处理:最长公共字串 # 例如:str1=xyzhaha 1223 543210 # str2=1223543210xyzccasdasdasd # 结果:543210 # 代码:IDE暴力循环,手写困难综合症,233333;动态规划方法不再叙述。 def func(str1, str2): startStr1 = 0 startStr2 = 0 maxLen = 0 for i in range(len(str1)): for j in range(len(str...

字符串处理:反转各个子单词,空格保持不变

字符串处理:反转各个子单词,空格保持不变
老程序狗遇到的面试问题,字符串处理:反转各个子单词,空格保持不变,手写代码完全无误真tm困难,IDE大法好。 字符串处理:反转各个子单词,空格保持不变 例如: hello word 结果: olleh drow 代码:无脑循环,遇到空格检测tempstr是否为空,不为空,倒序循环出来。。最后一个单词务必不要忘记追加 python: # coding: utf-8 # 字符串处理:反转各个子单词,空格保持不变 # 例如: hello word # ...

字符串处理:求最大递增字串长度

字符串处理:求最大递增字串长度
老程序狗经常遇到的面试问题,23333333。dp字符串处理:求最大递增字串长度。。mark。半路出家,半路忘。。 python版 # coding: utf-8 # dp字符串处理:求最大递增字串长度 def maxIncreStrLen(array): len_nums = len(array) if len_nums == 0: return 0 dp = [1] * len_nums for i in range(len_nums - 1): for j in range(i + 1): # 如果arra...

根据年月日计算星期几(基姆拉尔森公式)

根据年月日计算星期几(基姆拉尔森公式)
根据年月日计算星期几 主要是利用localtime函数(百度百科)获得计算机当前系统时间 然后根据基姆拉尔森计算公式转化为星期几 基姆拉尔森计算公式: W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。 获...

白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)

白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
首先来看看原题   微软2010年笔试题 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序数对。一个排列中逆序的总数就称为这个排列的逆序数。如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序数对,因此整个数组的逆序数对个数为4,现在给定一数组,要求统计出该数组的逆序数对个数。   计算数列的逆序数对个数最简单的方便就最从前向后依次统...

白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇

白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
在我的博客对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法进行了详细的讲解,并做成了电子书以供大家下载。下载地址为:http://download.csdn.net/detail/morewindows/4443208。 有网友提议到这本《MoreWindows白话经典算法之七大排序》电子书讲解细致用来平时学习是非常好的,但是页数有22页,不太合适做面试前的复习资料。因此在这里将这七种常用的...

白话经典算法系列之七 堆与堆排序

白话经典算法系列之七 堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。 二叉堆的定义 二叉堆是完全二叉树或者是近似完全二叉树。 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。 2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。 当父结点的键值总是大于或等于任何一个子节点的键...

白话经典算法系列之六 快速排序 快速搞定

白话经典算法系列之六 快速排序 快速搞定
快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影。 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助,达到快...

白话经典算法系列之五 归并排序的实现

白话经典算法系列之五 归并排序的实现
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。 [cpp] //将有序数组a[]和b[]合并到c[]中 void MemeryArray(int a[], int n...
Copyright © C/C++程序员之家 保留所有权利.   Theme  Ality 浙ICP备15011757号-3

用户登录