- 浏览: 138758 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
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 1088select * from LSK_SBCAJ t ord ... -
JS onkeydown onenter
2014-10-20 16:53 1002html中 onenter不是一个标准的事件。 js 中仿o ... -
Java数组删除指定元素
2014-09-18 11:30 2252package com.zas.util; impo ... -
sql 去重
2014-09-18 10:43 637delete from table t1 where t1.i ... -
linux 干掉所有java进程
2014-08-07 12:31 1031ps -ef|grep java|grep -v grep|c ... -
Oracle自带连接池使用(转载收录)
2014-07-31 10:01 1410最近在搞数据迁移:从sql server 迁数据到oracle ... -
html dom jsoup httpclient
2014-07-10 21:45 1112xml dom 对大多数java程序员来说并不陌生,但是htm ... -
Oracle 清库脚本
2014-07-08 22:40 1313清库脚本一份 表dossier_group 的字段Dossi ... -
Java 对象存储到oracle Blob字段
2014-07-08 14:52 1099Java 数据对象在没有持久存储到业务表时,可能需要临时存 ... -
Java 科学计数法数字转字符串
2014-07-08 14:30 1509科学计数法数字转字符串,记录代码,留后使用 double ... -
突破tomcat jsp编译65535行的限制
2014-07-04 17:16 4791使用tomcat时有可能会遇到其对jsp编译行数的限制, ... -
oracle 函数中游标及递归的应用
2014-06-19 17:13 1420在代码中使用递归可能大部分程序员都不陌生,但是在存储过程或 ... -
视频操作类
2014-06-19 17:04 1135接 视频分割项目预研 http://zhuyufufu.i ... -
视频分割项目预研
2014-06-11 16:12 2271由于工作需要,研究下视频切割。 现在的情况:视频切割是重中之 ... -
Java POI Excel 行高自适应
2014-03-28 14:08 15882在Excel处理的过程中,可能有需要用到行高自适应的时候。 ... -
Java POI Excel sheet 合并遇到的问题解决2
2014-03-25 18:03 3247上接 Java POI Excel sheet 合并 http ... -
文档展示:使用iText转换各种图片为PDF
2014-03-23 12:38 2906如题: 下面这段代码可以处理各种格式的图片,代码的出处忘记了 ... -
Java 进程执行外部程序,造成外部程序阻塞的一种原因
2014-03-23 12:06 1466前一阵子在研究文档展示时使用了java进程直接调用外部程序 ... -
Java POI Excel sheet 合并遇到的问题解决
2014-03-23 11:30 5123上接 Java POI Excel sheet http:// ... -
Java POI Excel sheet合并
2014-03-19 10:59 6628由于工作上的需要,特地研究了下Excel合并的问题,现贴出来, ...
相关推荐
回文判断是一个常见的编程问题,尤其在数据结构和算法的学习中常常被用作示例。在本实验报告中,我们将探讨如何使用栈这种数据结构来判断一个字符串是否为回文。 首先,我们要理解什么是回文。回文是指一个字符串...
本话题聚焦于"回文判断程序",并涉及到"栈"和"队列"这两种基本数据结构的操作。回文是一种正读反读都能读通的字符串,如"level"或"madam"。在判断一个字符串是否为回文时,栈和队列可以发挥重要作用。 首先,我们来...
在本主题中,我们将深入探讨如何使用C++语言来实现一个回文判断的程序。这个程序的主要目标是接收一个字符串作为输入,然后检查这个字符串是否符合回文的定义。 首先,我们需要了解C++中的字符串处理。在C++中,...
c++数据结构回文判断课程设计c++数据结构回文判断课程设计c++数据结构回文判断课程设计
利用C++栈和队列实现回文判断 可以自行输入
在IT领域,编程是解决问题的关键工具,而"回文判断,括号匹配,数制转换"是编程中常见的基础算法问题。以下将详细介绍这三个概念及其C++实现。 首先,我们来探讨**回文判断**。回文是指正读反读都能读通的字符串,...
在编程领域,回文判断是一个常见的基础问题,适用于学习和练习字符串处理技巧。在这个名为“回文判断”的C语言控制台程序中,我们将探讨如何使用C语言实现这个功能。 首先,我们要理解C语言的基本语法和结构。C语言...
数据结构的一题题目,一般老师都会布置这样的题目,大家可以来下载
"回文判断算法实现及数据结构应用" 在计算机科学中,回文判断是一个经典的问题,旨在判断一个字符串是否为回文。回文是指一个字符串,读取方式不变,小写字母和大写字母视为相同的字符。例如,"radar"是一个回文,...
在本项目中,我们使用Java编程语言,通过递归的方式实现了一个具有图形用户界面(GUI)的回文判断程序。下面将详细介绍这个项目中的关键知识点。 1. **Java基础**:首先,我们需要了解Java的基本语法,包括变量声明...
在编程领域,回文判断是一个常见的字符串处理问题。在给定的标题“回文判断_C语言_”中,我们可以理解到这是一个使用C语言编写的程序,它的主要任务是检查一个字符串是否为回文。回文是指一个字符串无论从左向右读...
在计算机科学中,回文判断是基础的数据结构和算法问题,常用于教学和面试,以考察编程者的逻辑思维和算法实现能力。 在数据结构试验中,回文判断通常会涉及到以下几个核心知识点: 1. 字符串处理:首先,我们需要...
根据给定的文件信息,我们可以总结出以下关于“递归实现回文判断”的知识点: ### 一、回文概念 回文是指一个字符串从左到右读和从右到左读都是一样的字符串。例如,“abcba”、“madam”等都是回文字符串。 ### ...
**回文判断软件详解** 在计算机编程领域,回文是一种特殊的字符串,它正读和反读都是一样的,比如“上海自来水来自海上”。本篇将详细介绍一个基于MFC(Microsoft Foundation Classes)框架编写的回文判断软件,该...
实验要求用栈的基本基本操作实现判断是否为回文,则必须定义栈的初始化和出栈、入栈;另外为了判断是否是回文,则定义一个数组,便于比较。在字符串输入的时候,保证同时进入数组和栈里。因为栈的后进先出的输出特性...
田鲁怀编写的数据结构课上用,但有点不详细,不能判断汉字字符串是否为回文
本次实验的主题是“数据结构实验”,重点关注栈和队列这两种基本数据结构,并利用它们来实现一个回文判断的功能。回文是一种特殊的字符串,其正读和反读是一样的,比如“上海自来水来自海上”。 首先,我们来看栈...
回文判断.cpp 数据结构内容!
这是一个回文判断的算法,很详细 欢迎大家下载
### CPP实现的回文判断 #### 核心概念与实现逻辑 本文将详细介绍一个使用C++语言实现的回文判断程序。回文是指正读反读都一样的字符串,例如“level”、“madam”等。在计算机科学领域,判断一个字符串是否为回文...