zoukankan      html  css  js  c++  java
  • 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 }

      

  • 相关阅读:
    #Git 21天打卡第一天 01天0526
    老徐第六期百人计划之职业发展方向&学习方向
    LR12.53安装中文补丁包,录制后回放脚本一致卡在编译的问题
    常用oracle语句整理
    LoadRunner11之批量插入SQL数据~2
    LoadRunner12之SQLServer数据库批量插入--.Net协议
    Jmeter连接Oracle数据库简单使用
    AppScan安装使用
    SQL多表连接
    [剑指Offer] 4.二维数组的查找
  • 原文地址:https://www.cnblogs.com/dogtwo0214/p/12059552.html
Copyright © 2011-2022 走看看