[编程题]添加回文串

添加回文串

https://www.nowcoder.com/questionTerminal/cfa3338372964151b19e7716e19987ac

添加回文串

对于一个字符串,我们想通过添加字符的方式使得新的字符串整体变成回文串,但是只能在原串的结尾添加字符,请返回在结尾添加的最短字符串。

给定原字符串A及它的长度n,请返回添加的字符串。保证原串不是回文串。
测试样例:

"ab",2
返回:"a"

方法一:

  1. 因为在原串结尾添加字符可以使其变成回文串,所以在原串开始位置删除字符也可以让其变成回文串;
  2. 于是要删除的字符串与要添加的字符串互为回文;
import java.util.*;

public class Palindrome {
    public String addToPalindrome(String A, int n) {
        for(int i = 1; i < n; i++){
            String st = A.substring(i, n);
            if(st.equals(new StringBuffer(st).reverse().toString()))
                return (new StringBuffer(A.substring(0, i)).reverse().toString());
        }
        return A;
    }
}

Python版:

# -*- coding:utf-8 -*-

class Palindrome:
    def addToPalindrome(self, A, n):
        for i in range(1, len(A)):
            if A[i:n] == A[i:n][::-1]:
                return A[:i][::-1]
        return A

方法二:

  1. 找出原串中的最长回文串(因为是在末尾添加使其变成回文串,所以最长回文字串一定是从前面某个位置开始到末尾位置);
  2. 剩余的字符串就与原串末尾要添加的字符串互为回文;
import java.util.*;

public class Palindrome {
    public String addToPalindrome(String A, int n) {
        String rsd = new StringBuffer(A).reverse().toString();
        for(int i = 0; i < n; i++){
            String s1 = A.substring(i, n);
            String s2 = rsd.substring(0, n - i);
            if(s1.equals(s2)){
                return rsd.substring(n - i, n);
            }
        }
        return A;
    }
}

其实方法一和方法二是一样的,但思考的切入点有一点点不同

全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务