Shortest Palindrome

String 专栏收录该内容
42 篇文章 0 订阅

Given a string s, you are allowed to convert it to a palindrome by adding characters in front of it. Find and return the shortest palindrome you can find by performing this transformation.

Example 1:

Input: "aacecaaa"
Output: "aaacecaaa"

Example 2:

Input: "abcd"
Output: "dcbabcd"

思路:从右往左,找palindrome,然后右边那块,反转append到前面来,再append s就是答案。 O(N^2)

class Solution {
    public String shortestPalindrome(String s) {
        if(isPalindrome(s)) {
            return s;
        }
        int endindex = 0;
        for(int i = s.length() - 1; i >= 0; i--) {
            if(isPalindrome(s.substring(0, i))) {
                endindex = i;
                break;
            }
        }
        
        StringBuilder sb = new StringBuilder();
        for(int i = s.length() - 1; i >= endindex; i--) {
            sb.append(s.charAt(i));
        }
        sb.append(s);
        return sb.toString();
    }

    private boolean isPalindrome(String s) {
        if(s == null || s.length() == 0) {
            return true;
        }
        int i = 0; int j = s.length() - 1;
        while(i < j) {
            if(s.charAt(i) != s.charAt(j)) {
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
            
}

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值