回文串算法Java实现
来源:互联网 发布:qq三国吃白菜数据 编辑:程序博客网 时间:2024/06/05 22:55
今天看到一个回文串的问题:
给定一个字符串,能否通过添加一个字母将其变成“回文串”,“回文串”是指正着和反着读都一样的字符串。如: “aa”, “aba” , ”abcba“等。“abcd”, “abce”就不是。
网上可能有一些数学技巧的快速解法,但是我这里想利用程序的穷举办法实现。
思路:
1)先判断给定的字符串是否回文串,如果是就不需要构造
2)如果不是回文串,就尝试添加一个字符构造一个新字符串
3)然后再判断新构造的字符串是否回文串
因为构成回文串的字符必定是从原来的字符串抽取一个出来构造的,所以可以让程序去穷举2)的情况。
例如 abc,要构成回文串,构造字符必定是a或b或c, 尝试组合成:
“Aabc”, “aAbc”, “abAc”,“abcA”;
“Babc”, “aBbc”, “abBc”,“abcB”;
“Cabc”, “aCbc”, “abCc”,“abcC”;
另外,如果是回文串,必定成对称分布。
实现程序如下:
public class Aglorith{ public static void main(String[] args){ String inputStr = "abc"; //输入字符串 String[] splitStrArr = inputStr.split(""); //拆分 String result = inputStr; boolean Successflag = false; //标记成功 //循环每个字符,这些字符是用来构造新字符串 for(int i=0;i<splitStrArr.length;i++) { //列举所有可能的添加位置,然后循环构造新字符串 for(int j=0;j<inputStr.length()+1;j++) { if (!validateStr(result)) { result = constructString(splitStrArr[i], inputStr,j); continue; }else{ System.out.println("Success:" + result); Successflag = true; return; } } } System.out.println("Success?: " + Successflag); } //检测当前字符串是否回文串 public static boolean validateStr(String inputstr){ if (inputstr == null) return false; String[] arrStr = inputstr.split(""); int loop = arrStr.length/2; int i=0 ,j = 0; j = arrStr.length; for(i=0;i<loop;i++){ //判断每个字符是否对称 if(arrStr[i].equals(arrStr[j-i-1])){ continue; } else { return false; } } return true; } //尝试构造新字符串 public static String constructString(String addchar, String orginStr, int i){ String result; if(i<0||i>orginStr.length()){ return "false"; } if(i==0) { result = addchar + orginStr; }else if(i==orginStr.length()) { result = orginStr+addchar; } else { result = orginStr.substring(0, i) + addchar + orginStr.substring(i, orginStr.length()); } return result; }}
如果要加快速度,可以加多一步在splitStrArr中排除重复的字符。
String[] splitStrArr = inputStr.split(“”); //拆分
0 0
- 回文串算法Java实现
- Manacher算法(最大回文子串),JAVA实现
- 最长回文串——manacher算法java实现
- 某公司 回文串 算法实现
- 实现回文字符串判断 -- JAVA 算法学习
- Java实现-有效回文串
- JavaScript实现回文算法
- java-最长回文串-中心扩展算法
- 【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】
- Java 实现求最长回文子串
- 字符串回文-Java实现
- Java实现-回文数
- 判断回文递归算法实现
- 最长回文子串(manacher算法实现)
- 最长回文子串(manacher算法实现)
- PHP实现 Manacher 最大回文子串算法
- 求最长回文子串_Manacher算法_Java实现
- Manacher算法实现求最长回文子串的长度
- Flask+MySQL部署到SAE
- MAC快捷键总结
- 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
- 控件的移动方法
- 递归求数组的最大值,主要说下递归执行的过程
- 回文串算法Java实现
- [20160302] QQ数据线的思考 / 无私奉献的"引导者"
- PAT 1107. Social Clusters (30)
- 委托加载图片
- 深度学习资料
- 博弈
- W6s数据传输格式
- Android中.9图片的了解和制作过程
- [LeetCode OJ]16. 3Sum Closest