回文字算法(java版本)
package com.gdh.backtext;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class BackText {
String text;
public BackText() {
super();
this.text = null;
}
public BackText(String text) {
super();
this.text = text;
}
public boolean isBackText(){
for(int i=0,j=text.length()-i-1;i<=j;i++,j--){
if( text.charAt(i) != text.charAt(j) ){
return false;
}
}
return true;
}
public Map<Character,Integer> countString(){
Map<Character,Integer> map=new HashMap<>();
int count=0;
String temp=new String();
for(int i=0;i< text.length();i++){
if ( temp.indexOf(text.charAt(i), 0) < 0){
temp+=text.charAt(i);
}
}
map.clear();
for(int i=0;i< temp.length();i++){
if(!map.containsKey(temp.charAt(i))){
for(int j=0;j< text.length();j++){
if(text.charAt(j) == temp.charAt(i) ){
count++;
}
}
map.put(temp.charAt(i), count);
count=0;
}
}
//循环打印
for(Entry<Character,Integer> item:map.entrySet()){
System.out.println("字符:" + item.getKey() + " 值:" + item.getValue());
}
return map;
}
public String convert(){
int checksum = 0;
int itemcount=0;
Map<Character,Integer> map=countString();
for(Entry<Character,Integer> item:map.entrySet()){
checksum+=item.getValue();
if( item.getValue() %2 != 0)
itemcount++;
}
if( itemcount > 1 ){
System.out.println("该字符串不能转换为回文字");
return null;
}
StringBuffer temp=new StringBuffer(text);//线程安全
//StringBuilder temp=new StringBuilder();//线程非安全
int begIdx=0;
int endIdx=checksum-1;
Character key=null;
boolean flag=false;
for(Entry<Character,Integer> item:map.entrySet()){
if( checksum % 2 ==0 ){
for(int i=0;i<item.getValue()/2;i++){
temp.setCharAt(begIdx++, item.getKey());
temp.setCharAt(endIdx--, item.getKey());
}
}else{
if(item.getValue()%2==0 ){
for(int i=0;i<item.getValue()/2;i++){
temp.setCharAt(begIdx++, item.getKey());
temp.setCharAt(endIdx--, item.getKey());
}
}else{
key=item.getKey();
flag=true;
continue;
}
}
}
if(flag)
{
for(int i=0;i<map.get(key);i++){
temp.setCharAt(begIdx++, key);
}
}
return temp.toString();
}
public static void main(String[] args) {
BackText bt=new BackText("1122334455667788990");
if( !bt.isBackText() )
System.out.println("该字符串不是回文字");
else
System.out.println("该字符串是回文字");
String dest=new String();
System.out.println("开始转换...");
dest=bt.convert( ) ;
System.out.print("转换后的结果为:");
System.out.println(dest);
}
}
回文字算法(java版本)的更多相关文章
- 通过“回文字算法”复习C++语言。
一.什么是回文字 给定一个字符串,从前往后读和从后往前读,字符串序列不变.例如,河北省农村信用社的客服电话是“96369”,无论从后往前读,还是从前后往后读,各个字符出现的位置不变. 二.功能实现 ( ...
- 微博短链接的生成算法(Java版本)
最近看到微博的短链接真是很火啊,新浪.腾讯.搜狐等微博网站都加入了短链接的功能.之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少.短链接的主要职责 ...
- POJ 3974 最长回文字串(manacher算法)
题意:给出一个字符串,求出最长回文字串. 思路:一开始我直接上了后缀数组DC3的解法,然后MLE了.看了DISCUSS发现还有一种计算回文字串更加优越的算法,就是manacher算法.就去学习了一下, ...
- 最长回文字串——manacher算法
时间复杂度:O(n) 参考:https://segmentfault.com/a/1190000003914228 1.问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度. 如果一个字 ...
- java实现简单回文算法
算法要求 编写一个程序,判断一个字符串是否为"回文".回文串:字符串字符从前往后与从后往前一致(中心对称). 算法思路 首先将字符串等分左右两块,然后依次对称比较每一对字符是否相同 ...
- 归并排序算法 java 实现
归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...
- Atitit 电子商务订单号码算法(java c# php js 微信
Atitit 电子商务订单号码算法(java c# php js 微信 1.1. Js版本的居然钱三爷里面没有..只好自己实现了. 1.2. 订单号标准化...长度16位 1.3. 订单号的结构 前 ...
- 求字符串的最长回文字串 O(n)
昨天参加了某公司的校园招聘的笔试题,做得惨不忍睹,其中就有这么一道算法设计题:求一个字符串的最长回文字串.我在ACM校队选拔赛上遇到过这道题,当时用的后缀数组AC的,但是模板忘了没写出代码来. 回头我 ...
- JGibbLDA:java版本的LDA(Latent Dirichlet Allocation)实现、修改及使用
转载自:http://blog.csdn.net/memray/article/details/16810763 一.概述 JGibbLDA是一个java版本的LDA(Latent Dirichl ...
随机推荐
- js 优化
一.for循环的优化 <!doctype html> <html lang="en"> <head> <meta charset=&quo ...
- jquery 之 Deferred 使用与实现
观察者模式是开发中经常使用的模式,这个模式由两个主要部分组成:主题和观察者.通过观察者模式,实现主题和观察者的解耦. 主题负责发布内容,而观察者则接收主题发布的内容.通常情况下,观察者都是多个,所以, ...
- Web前端优化最佳实践及工具集锦
Web前端优化最佳实践及工具集锦 发表于2013-09-23 19:47| 21315次阅读| 来源Googe & Yahoo| 118 条评论| 作者王果 编译 Web优化Google雅虎P ...
- 【博客美化】04.自定义地址栏logo
博客园美化相关文章目录: [博客美化]01.推荐和反对炫酷样式 [博客美化]02.公告栏显示个性化时间 [博客美化]03.分享按钮 [博客美化]04.自定义地址栏logo [博客美化]05.添加Git ...
- JavaScript之毒瘤
0.导言 JavaScript中有许多难以避免的问题特性.接下来就一一揭示. 1.全局变量 在所有JavaScript的糟糕特性中,最为糟糕的就是全局变量的依赖.全局变量使得在同一个程序中运行独立的子 ...
- Java多线程系列--“JUC原子类”04之 AtomicReference原子类
概要 本章对AtomicReference引用类型的原子类进行介绍.内容包括:AtomicReference介绍和函数列表AtomicReference源码分析(基于JDK1.7.0_40)Atomi ...
- Android自动连接指定的wifi,免密码或指定密码
一.运行时的状态 遇到一个这样的要求:“不进行扫描操作,怎么对指定的免密码WIFI进行连接(之前没有连接过)”,于是动手写了一个Demo,如图所示未连接成功时的状态,第一个编辑框让用户输入SSID,第 ...
- 学习RxJS:Cycle.js
原文地址:http://www.moye.me/2016/06/16/learning_rxjs_part_two_cycle-js/ 是什么 Cycle.js 是一个极简的JavaScript框架( ...
- Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable
酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...
- 从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
背景: 在清空input file标签选中值时,分别用了以下方法,发现有的对有的错: [√]$("#file")[0].value = ""; [√]$(&qu ...