zoukankan      html  css  js  c++  java
  • LeetCode 680. Valid Palindrome II 验证回文字符串 Ⅱ(C++/Java)

    题目:

    Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome.

    Example 1:

    Input: "aba"
    Output: True
    

    Example 2:

    Input: "abca"
    Output: True
    Explanation: You could delete the character 'c'.
    

    Note:

    1. The string will only contain lowercase characters a-z. The maximum length of the string is 50000.

    分析:

    给定一个非空字符串,在最多删去一个字符的前提下,判断是不是回文字符串。

    由于删去一个字符也算是回文字符串,也就说以删去的字符为基础剩下的字符也同样应该是回文字符串。在这里我们以abcbda为例。

    从前后开始比较字符是否相同,当发现b和d不同时,我们要删除一个字符,来继续判断剩下的字符串是否是回文字符串,因为字符不同,前后两个都可以删除,所以返回的两个结果取并集。删除b的话,显然cbd不构成回文字符串,而删除d的话bcb构成回文字符串。

    程序:

    C++

    class Solution {
    public:
        bool validPalindrome(string s) {
            int l = 0;
            int r = s.size()-1;
            while(l < r){
                if(s[l] != s[r]){
                    return isPalindrome(s, l+1, r) || isPalindrome(s, l, r-1);
                }
                else{
                    r--;
                    l++;
                }
            }
            return true;
        }
    private:
        bool isPalindrome(string s, int l, int r){
            while(l < r){
                if(s[l++] != s[r--])
                    return false;
            }
            return true;
        }
    };

    Java

    class Solution {
        public boolean validPalindrome(String s) {
            int l = 0;
            int r = s.length()-1;
            while(l < r){
                if(s.charAt(l) != s.charAt(r))
                    return isPalindrome(s, l+1, r) || isPalindrome(s, l, r-1);
                l++;
                r--;
            }
            return true;
        }
        private boolean isPalindrome(String s, int l, int r){
            while(l < r){
                if(s.charAt(l++) != s.charAt(r--))
                    return false;
            }
            return true;
        }
    }
  • 相关阅读:
    va_list/va_start/va_arg/va_end深入分析【转】
    Linux Kernel中断子系统来龙去脉浅析【转】
    Linux系统调用---同步IO: sync、fsync与fdatasync【转】
    Linux中变量#,#,@,0,0,1,2,2,*,$$,$?的含义【转】
    linux下的module_param()解释【转】
    Makefile 使用总结【转】
    FLASH的知识【转】
    Linux MTD系统剖析【转】
    linux的mtd架构分析【转】
    linux设备树笔记__dts基本概念及语法【转】
  • 原文地址:https://www.cnblogs.com/silentteller/p/12293163.html
Copyright © 2011-2022 走看看