LeetCode刷题191218

  好多天没有更新了,今天有空,刷一道。

算法第5题

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring

  这道题有多种解法,用了这位网友关于动态规划的思路完成的,传送门

 1     public class Solution
 2     {
 3         public string LongestPalindrome(string s)
 4         {
 5             var length = s.Length;
 6 
 7             if (length <= 1)
 8             {
 9                 return s;
10             }
11 
12             bool[,] status = new bool[length, length];
13 
14             var strArray = s.ToCharArray();
15             var palindromeLength = 1;
16             var palindrmoeStr = strArray.First().ToString();
17 
18             for (int r = 1; r < length; r++)
19             {
20                 for (int l = 0; l < r; l++)
21                 {
22                     if (strArray[l] == strArray[r] && (r - l <= 2 || status[l + 1, r - 1]))
23                     {
24                         status[l, r] = true;
25 
26                         if (r - l + 1 > palindromeLength)
27                         {
28                             palindromeLength = r - l + 1;
29                             palindrmoeStr = s.Substring(l, palindromeLength);
30                         }
31                     }
32                 }
33             }
34 
35             return palindrmoeStr;
36         }
37     }

  这道题的关键点在于如何判断一个字符串是不是“回文”。所谓“回文”,就是说这个字符串正序和逆序的结果是相同的。因此,如果这个字符串是回文,那么它的首字母和尾字母是相同的。并且对于一个“回文”的字符串来说,如果我们拿掉了首字母和尾字母,剩下的部分应该依然是回文。

  因此我们可以这么来判断一个字符串是不是“回文”,如果它的首尾字母相同,我们就去掉这个字符串的首尾字符,(否则说明这个字符串满足条件)最终会得到长度为2,或3的子字符串。此时如果首尾依旧相同,那么我们就可以说这个字符串是满足条件的了。也就是说我们可以利用子的字符串是不是“回文”,来判断父字符串是不是回文了。

 

另,顺手把第九题也做了。

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true
示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number

 1 public class Solution {
 2         public bool IsPalindrome(int x)
 3         {
 4             var str = x.ToString();
 5             var length = str.Length;
 6 
 7             if (length <= 1)
 8             {
 9                 return true;
10             }
11 
12             var result = true;
13 
14             var array = str.ToCharArray();
15 
16             for (int i = 0; i < length / 2 + 1; i++)
17             {
18                 if (array[i] != array[length - 1 - i])
19                 {
20                     result = false;
21                     break;
22                 }
23             }
24 
25             return result;
26         }
27 }

 

  

posted @ 2019-12-18 14:03  DogTwo  阅读(263)  评论(0编辑  收藏  举报