当前位置:网站首页>Record of force deduction and question brushing
Record of force deduction and question brushing
2022-07-06 15:39:00 【Xiaogeng who loves learning】
Dynamic programming
The first example Problem analysis and problem solving ideas of the longest palindrome substring
List of articles
Preface
Tips : Here you can add the general content to be recorded in this article :
I am a novice , Blogging is pure self memory , Convenient to review , No joy, no spray.
Tips : The following is the main body of this article , The following cases can be used for reference
One 、 What is dynamic planning ?
It's straight from the bottom , The most simple , The smallest problem f(1) and f(2) Start pushing up , Until we get the answer we want f(20), This is the idea of dynamic planning , That's why dynamic programming is generally free of recursion , It 's the loop iteration that does the calculation .
Two 、 The steps to solve the problem
1. Problem description
Give you a string s, find s The longest palindrome substring in .
1 <= s.length <= 1000
s It consists only of numbers and English letters
Be careful : The substring is continuous
Input :s = “babad”
Output :“bab”
explain :“aba” It's the same answer .
Input :s = “cbbd”
Output :“bb”
2. Problem analysis
The problem of finding the longest palindrome substring can be transformed into : When from the first i Character to character j individual The substring composed of characters is the longest palindrome substring , solve i and j
3. Problem solving steps
1. State definition :
Definition dp[ i ][ j ] Express s Of the i Character to character j A substring of characters , Whether it can form a palindrome substring
true Represents the interval [i,j] Palindrome string
false Represents the interval [i,j] Not a palindrome string
2. State transition equation :
dp[ i ][ j ] Can it form a palindrome substring , It depends on two factors
- The current first element is the same ,s[i] == s[j]
- The preceding substring is palindrome ,dp[i+1][j-1] == true
3. The state transition equation supplements the special case
The second use case above ,s = “cbbd”, When left = 1,right = 2 when , The judgment is :
s[1] == s[2] -> true
dp[2][1] -> false
Which leads to d[1][2] Wrong set as false
The root of the mistake is , When 「 The leading and trailing elements are next to 」 When left + 1 and right - 1 The problems caused
therefore , according to 「 Whether the leading and trailing elements are next to 」 Rearrange the state transition equation
- When the leading and trailing elements are next to ,right - left == 1
If the first and last elements are the same , Can form palindrome string
If the first and last elements are different , Does not form a palindrome string - When there is a gap between the first and last elements ,right - left > 1
The current leading and trailing elements are the same s[i] == s[j], And the preceding substring is palindrome dp[i+1][j-1] == true, Can form palindrome string
4. Problem solving steps
1. Initialize 2D array
example :
2. The code is as follows ( Example )
class Solution {
public:
string longestPalindrome(string s) {
int n=s.size();
vector<vector<bool>>dp(n,vector<bool>(n,false));
for(int i=0;i<n;i++)
{
dp[i][i]=true;
}
int begin=0;
int maxlength=1;
for(int left=n-1;left>=0;left--)
{
for(int right=left+1;right<n;right++)
{
if(right-left==1)
{
if(s[left]==s[right])
{
dp[left][right]=true;
}
else{
dp[left][right]=false;
}
}
else{
if(s[left]==s[right]&&dp[left+1][right-1]==true)
{
dp[left][right]=true;
}
else{
dp[left][right]=false;
}
}
if(dp[left][right]==true&&right-left+1>maxlength)
{
begin=left;
maxlength=right-left+1;
}
}
}
return s.substr(begin,maxlength);
}
};
3. Thought analysis
Here is the reference
Quote the original :
`
https://leetcode-cn.com/problems/longest-palindromic-substring/solution/by-dodo_1202-k031/
、
边栏推荐
- JDBC introduction
- 学习记录:使用STM32外部输入中断
- C语言学习笔记
- Research Report on market supply and demand and strategy of China's medical chair industry
- STM32 learning record: play with keys to control buzzer and led
- STM32学习记录:输入捕获应用
- 基于485总线的评分系统
- Cost accounting [22]
- LeetCode#19. Delete the penultimate node of the linked list
- The wechat red envelope cover designed by the object is free! 16888
猜你喜欢
ucore lab 6
Future trend and planning of software testing industry
What to do when programmers don't modify bugs? I teach you
What if software testing is too busy to study?
Learning record: understand systick system timer and write delay function
Learning record: use STM32 external input interrupt
Leetcode notes - dynamic planning -day6
Mysql database (IV) transactions and functions
What are the software testing methods? Show you something different
Do you know the advantages and disadvantages of several open source automated testing frameworks?
随机推荐
The most detailed postman interface test tutorial in the whole network. An article meets your needs
How to become a good software tester? A secret that most people don't know
Learning record: use stm32f1 watchdog
Research Report on medical anesthesia machine industry - market status analysis and development prospect prediction
Cost accounting [14]
Indonesian medical sensor Industry Research Report - market status analysis and development prospect forecast
LeetCode#53. Maximum subarray sum
Mysql database (V) views, stored procedures and triggers
STM32 learning record: play with keys to control buzzer and led
Matlab example: two expressions of step function
C语言学习笔记
Do you know the performance testing terms to be asked in the software testing interview?
LeetCode#62. Different paths
Learning record: STM32F103 clock system overview working principle
ucorelab3
JS --- JS function and scope (II)
LeetCode#268. Missing numbers
LeetCode#19. Delete the penultimate node of the linked list
编程到底难在哪里?
Crawler series of learning while tapping (3): URL de duplication strategy and Implementation