牛客堂常见面试题精讲(一)4
2015-09-21 21:41
417 查看
根据最长回文子序列处理字符串
代码如下:
代码如下:
package com.zhao.niuke; public class Problem_04 { public static String getPalindrome(String str, String strlps) { //str是给定一个字符串 //strlps是最长回文子序列在任意位置添加字符后整体都是回文串的其中的一种结果 if (str == null || str.equals("")) { return ""; }//判空 char[] chas = str.toCharArray();//将字符串先转换成字符数组 char[] lps = strlps.toCharArray();//同理最小的这个串也转化成字符数组 char[] res = new char[2 * chas.length - lps.length];//开辟存储空间用于存储返回的字符串 int chasl = 0;//左边 int chasr = chas.length - 1;//右边 int lpsl = 0;//左边 int lpsr = lps.length - 1;//右边 int resl = 0;//左边 int resr = res.length - 1;//右边 int tmpl = 0;//左边 int tmpr = 0;//右边 while (lpsl <= lpsr) { tmpl = chasl; tmpr = chasr; //先从lps中第一个串的第一个字符和chas中的字符开始比较起,一个个比较找出相等的,也就是先找最左边的1 while (chas[chasl] != lps[lpsl]) { chasl++; } //再从chas中找lps里面的最后一个元素在chas相等的,也就是找最右边的1 while (chas[chasr] != lps[lpsr]) { chasr--; } //开始设置字符串的值 set(res, resl, resr, chas, tmpl, chasl, chasr, tmpr); resl += chasl - tmpl + tmpr - chasr; resr -= chasl - tmpl + tmpr - chasr; res[resl++] = chas[chasl++]; res[resr--] = chas[chasr--]; lpsl++; lpsr--; } return String.valueOf(res); } public static void set(char[] res, int resl, int resr, char[] chas, int ls, int le, int rs, int re) { for (int i = ls; i < le; i++) { res[resl++] = chas[i]; res[resr--] = chas[i]; } for (int i = re; i > rs; i--) { res[resl++] = chas[i]; res[resr--] = chas[i]; } } public static void main(String[] args) { System.out.println("返回:"+getPalindrome("AB1C2DE34F3GHJ21KL","1234321")); } }//感觉得费时间好好写啊!
相关文章推荐
- 永远忘不了那天
- 《剑指Offer》面试题:栈的压入弹出序列是否匹配
- 黑马程序员--多线程
- 黑马程序员--接口
- 黑马程序员--多态
- 黑马程序员_java 操作文件的扩展,制作excel表格
- 《程序员面试金典》--分割链表
- leetcode之Add Digits
- 牛客堂常见面试题精讲(一)3
- 面试笔试题记录
- 《剑指Offer》面试题:实现O(1)获取min的栈
- 程序员面试总结
- 设计一个getMin功能的栈,如果面试官让你写一个数组类,一定不要用指针去管理new出来原生的数组,那就是在给自己挖坑
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- java面试题集锦5
- java面试题集锦4
- java面试题集锦3
- java面试集锦2
- java面试题集锦1
- 面试中对于排序操作的考察