- 浏览: 135462 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
zheng_zhimeng:
这个版本在linux的版本下有问题,亲们用的没有问题么
文档展示:IcePDF 将PDF转换为图片 -
yuming.xiao:
转换的某些图片,有些模糊。不知道楼主遇到这个问题没有
文档展示:IcePDF 将PDF转换为图片 -
zenghongqing:
您好,请教您一个问题://cell内容字符串总宽度 doub ...
Java POI Excel 行高自适应 -
xiang37:
http://xiva.iteye.com/blog/2066 ...
视频分割项目预研 -
I白I:
怎么还配置数据库了?
视频分割项目预研
回文
把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。
锦字回文
前秦时期,秦州刺史窦滔因得罪了苻坚的手下大官被流放到流沙县。夫妻天各一方,他的妻子苏蕙特地在一块锦缎上绣上840个字,纵横29个字的方图,可以任意地读,共能读出3752首诗,表达了她对丈夫的思念与关心之情。 后遂以“锦字书”等指前秦苏蕙寄给丈夫的织锦回文诗。“锦字”典出于前秦窦滔之妻苏蕙,织锦为回文《璇玑图》诗,赠其夫。后世因称“锦字”为妻寄夫之信。
回文判断通常是面试常用的题目,写出多种回文判断算法,从内存占用及执行时间优化角度衡量算法优劣,是面试的重点。
程序判断一个字符串是否为回文
本文为算法优化思考类文章,故而会介绍几种回文判断算法。
首先展示最简单的回文判断算法:将字符串翻转判断其是否相同。
Java代码展示如下:
上面这个程序可能不是最好的回文算法,但是它展示了对StringBuffer里的reverse的理解掌握。
下面写一下reverse函数:
有兴趣的朋友可以查看一下StringBuffer的reverse实现,并尝试改进上面的字符串翻转程序。
下面介绍另一种回文判断算法:从字符串两头遍历,一个一个字符比较到中间。算法也是非常好理解的。
Java实现如下:
另外一种解决问题的思路是采用递归算法
各种算法的优劣不能凭直观感觉,以后将尽量做一个算法基准测试来衡量。
最后给出整个Java代码:
把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。
锦字回文
前秦时期,秦州刺史窦滔因得罪了苻坚的手下大官被流放到流沙县。夫妻天各一方,他的妻子苏蕙特地在一块锦缎上绣上840个字,纵横29个字的方图,可以任意地读,共能读出3752首诗,表达了她对丈夫的思念与关心之情。 后遂以“锦字书”等指前秦苏蕙寄给丈夫的织锦回文诗。“锦字”典出于前秦窦滔之妻苏蕙,织锦为回文《璇玑图》诗,赠其夫。后世因称“锦字”为妻寄夫之信。
回文判断通常是面试常用的题目,写出多种回文判断算法,从内存占用及执行时间优化角度衡量算法优劣,是面试的重点。
程序判断一个字符串是否为回文
本文为算法优化思考类文章,故而会介绍几种回文判断算法。
首先展示最简单的回文判断算法:将字符串翻转判断其是否相同。
Java代码展示如下:
package com.zas.test; /** * 判断一个字符串是否为回文 * @author zas */ public class Palindrome { /** * 判断一个字符串是否为回文 * @param inputString * @return true / false */ public static boolean isPalindrome(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return true; } StringBuffer sb = new StringBuffer(inputString); String reversedString = sb.reverse().toString(); if(inputString.equals(reversedString)){ return true; } return false; } /** * @param args */ public static void main(String[] args) { System.out.println(Palindrome.isPalindrome("abc")); System.out.println(Palindrome.isPalindrome("aba")); System.out.println(Palindrome.isPalindrome("")); System.out.println(Palindrome.isPalindrome(" ")); System.out.println(Palindrome.isPalindrome(null)); } }
上面这个程序可能不是最好的回文算法,但是它展示了对StringBuffer里的reverse的理解掌握。
下面写一下reverse函数:
/** * 判断一个字符串是否为回文 * @param inputString * @return true / false */ public static boolean isPalindrome(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return true; } //StringBuffer sb = new StringBuffer(inputString); //String reversedString = sb.reverse().toString(); String reversedString = reverse(inputString); if(inputString.equals(reversedString)){ return true; } return false; } /** * 翻转一个字符串 * @param inputString */ private static String reverse(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return inputString; } char[] charArray = new char[inputString.length()]; for (int i = charArray.length - 1, j = 0; i > -1 ; i--, j++) { charArray[j] = inputString.charAt(i); } return String.valueOf(charArray); }
有兴趣的朋友可以查看一下StringBuffer的reverse实现,并尝试改进上面的字符串翻转程序。
下面介绍另一种回文判断算法:从字符串两头遍历,一个一个字符比较到中间。算法也是非常好理解的。
Java实现如下:
/** * 判断一个字符串是否为回文 * @param inputString * @return true / false */ public static boolean isPalindrome(String inputString) { //通过翻转字符串实现字符串回文判断 //return isPalindromeByReverse(inputString); //通过两头遍历实现字符串回文判断 return isPalindromeByTraverseBothEnds(inputString); } private static boolean isPalindromeByTraverseBothEnds(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return true; } //获得中间长度 int len = inputString.length() / 2; for (int i = 0, j = inputString.length() - 1; i < len; i++, j--) { if(inputString.charAt(i) != inputString.charAt(j)){ return false; } } return true; }
另外一种解决问题的思路是采用递归算法
/** * 判断一个字符串是否为回文 * @param inputString * @return true / false */ public static boolean isPalindrome(String inputString) { //通过翻转字符串实现字符串回文判断 //return isPalindromeByReverse(inputString); //通过两头遍历实现字符串回文判断 //return isPalindromeByTraverseBothEnds(inputString); //递归算法解决问题 return isPalindromeByRecursion(inputString); } /** * 递归算法解决问题 * @param inputString * @return */ private static boolean isPalindromeByRecursion(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return true; } char[] charArray = inputString.toCharArray(); int length = inputString.length(); return fun(0, length-1, charArray, length); } private static boolean fun(int low, int high, char[] str, int length) { if (length == 0 || length == 1) { return true; } if (str[low] != str[high]) { return false; } return fun(low + 1, high - 1, str, length - 2); }
各种算法的优劣不能凭直观感觉,以后将尽量做一个算法基准测试来衡量。
最后给出整个Java代码:
package com.zas.test; /** * 判断一个字符串是否为回文 * @author zas */ public class Palindrome { /** * 判断一个字符串是否为回文 * @param inputString * @return true / false */ public static boolean isPalindrome(String inputString) { //通过翻转字符串实现字符串回文判断 //return isPalindromeByReverse(inputString); //通过两头遍历实现字符串回文判断 //return isPalindromeByTraverseBothEnds(inputString); //递归算法解决问题 return isPalindromeByRecursion(inputString); } /** * 递归算法解决问题 * @param inputString * @return */ private static boolean isPalindromeByRecursion(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return true; } char[] charArray = inputString.toCharArray(); int length = inputString.length(); return fun(0, length-1, charArray, length); } private static boolean fun(int low, int high, char[] str, int length) { if (length == 0 || length == 1) { return true; } if (str[low] != str[high]) { return false; } return fun(low + 1, high - 1, str, length - 2); } private static boolean isPalindromeByTraverseBothEnds(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return true; } //获得中间长度 int len = inputString.length() / 2; for (int i = 0, j = inputString.length() - 1; i < len; i++, j--) { if(inputString.charAt(i) != inputString.charAt(j)){ return false; } } return true; } /** * 通过翻转字符串实现回文判断 * @param inputString * @return true / false */ private static boolean isPalindromeByReverse(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return true; } //得到翻转字符串 //StringBuffer sb = new StringBuffer(inputString); //String reversedString = sb.reverse().toString(); String reversedString = reverse(inputString); if(inputString.equals(reversedString)){ return true; } return false; } /** * 翻转一个字符串 * @param inputString */ private static String reverse(String inputString) { if(null == inputString || "".equals(inputString.trim())){ return inputString; } char[] charArray = new char[inputString.length()]; for (int i = charArray.length - 1, j = 0; i > -1 ; i--, j++) { charArray[j] = inputString.charAt(i); } return String.valueOf(charArray); } /** * @param args */ public static void main(String[] args) { System.out.println(Palindrome.isPalindrome("abc")); System.out.println(Palindrome.isPalindrome("aba")); System.out.println(Palindrome.isPalindrome("")); System.out.println(Palindrome.isPalindrome(" ")); System.out.println(Palindrome.isPalindrome(null)); System.out.println(Palindrome.isPalindrome("烦烦")); System.out.println(Palindrome.isPalindrome("烦烦烦烦")); } }
发表评论
-
oracle按照某一字段里的数字排序
2014-10-21 19:59 1035select * from LSK_SBCAJ t ord ... -
JS onkeydown onenter
2014-10-20 16:53 966html中 onenter不是一个标准的事件。 js 中仿o ... -
Java数组删除指定元素
2014-09-18 11:30 2210package com.zas.util; impo ... -
sql 去重
2014-09-18 10:43 577delete from table t1 where t1.i ... -
linux 干掉所有java进程
2014-08-07 12:31 998ps -ef|grep java|grep -v grep|c ... -
Oracle自带连接池使用(转载收录)
2014-07-31 10:01 1365最近在搞数据迁移:从sql server 迁数据到oracle ... -
html dom jsoup httpclient
2014-07-10 21:45 1061xml dom 对大多数java程序员来说并不陌生,但是htm ... -
Oracle 清库脚本
2014-07-08 22:40 1264清库脚本一份 表dossier_group 的字段Dossi ... -
Java 对象存储到oracle Blob字段
2014-07-08 14:52 1067Java 数据对象在没有持久存储到业务表时,可能需要临时存 ... -
Java 科学计数法数字转字符串
2014-07-08 14:30 1436科学计数法数字转字符串,记录代码,留后使用 double ... -
突破tomcat jsp编译65535行的限制
2014-07-04 17:16 4687使用tomcat时有可能会遇到其对jsp编译行数的限制, ... -
oracle 函数中游标及递归的应用
2014-06-19 17:13 1378在代码中使用递归可能大部分程序员都不陌生,但是在存储过程或 ... -
视频操作类
2014-06-19 17:04 1090接 视频分割项目预研 http://zhuyufufu.i ... -
视频分割项目预研
2014-06-11 16:12 2170由于工作需要,研究下视频切割。 现在的情况:视频切割是重中之 ... -
Java POI Excel 行高自适应
2014-03-28 14:08 15615在Excel处理的过程中,可能有需要用到行高自适应的时候。 ... -
Java POI Excel sheet 合并遇到的问题解决2
2014-03-25 18:03 3176上接 Java POI Excel sheet 合并 http ... -
文档展示:使用iText转换各种图片为PDF
2014-03-23 12:38 2856如题: 下面这段代码可以处理各种格式的图片,代码的出处忘记了 ... -
Java 进程执行外部程序,造成外部程序阻塞的一种原因
2014-03-23 12:06 1432前一阵子在研究文档展示时使用了java进程直接调用外部程序 ... -
Java POI Excel sheet 合并遇到的问题解决
2014-03-23 11:30 5023上接 Java POI Excel sheet http:// ... -
Java POI Excel sheet合并
2014-03-19 10:59 6568由于工作上的需要,特地研究了下Excel合并的问题,现贴出来, ...
相关推荐
数据结果实验之回文判断程序栈和队列基本操作数据结果实验之回文判断程序栈和队列基本操作数据结果实验之回文判断程序栈和队列基本操作
c++数据结构回文判断课程设计c++数据结构回文判断课程设计c++数据结构回文判断课程设计
利用C++栈和队列实现回文判断 可以自行输入
回文判断 数据结构 对于一个从键盘输入的字符串,判断其是否为回文。回文即正反序相同。如“abba”是回文,而“abab”不是回文。
包括回文判断,括号匹配,数制转换的C++代码
数据结构的一题题目,一般老师都会布置这样的题目,大家可以来下载
通过C++程序来判断输入的一串字符是否为回文
实验要求用栈的基本基本操作实现判断是否为回文,则必须定义栈的初始化和出栈、入栈;另外为了判断是否是回文,则定义一个数组,便于比较。在字符串输入的时候,保证同时进入数组和栈里。因为栈的后进先出的输出特性...
田鲁怀编写的数据结构课上用,但有点不详细,不能判断汉字字符串是否为回文
递归实现回文判断
回文判断.cpp 数据结构内容!
用递归实现回文判断,有GUI界面。算法简洁明了。请多指教
这是一个回文判断的算法,很详细 欢迎大家下载
数据结上机编程:回文判断,很适合数据结构初学者参考!
回文判断,试编写一个算法,判断依次读入的一个以@为结素符的字母序列。自己找到的,希望帮到你们。
数据结构试验 回文判断 源代码 下载 经典哦
数据结构一作业题,课程设计
Python基础:判断回文,代码简介易懂,是刚学python的人可以学习和借鉴的程序
数据结构回文判断 实验类型:验证型 【问题描述】 试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如'序列1 & 序列2'模式的字符序列。其中序列1和序列2中都不含字符'&',且序列2是序列1的逆 ...
MFC做的回文判断软件,有源代码,输入任意一个字符串,单击确定,软件自动判断并且输出