偶然在论坛上看到了一道面试题,题目如下:
问题: 如果给定的字符串从左到右和从右到左的序列完全一致,那么这样的字符串被称为 palindrome。例如,下面的字符串都是 palindromes。 "kayak" "codilitytilidoc" "neveroddoreven" 如果字符串A和字符串B含有相同的字母,但是顺序可能不一样,那么A被称为是B的anagram。例如,下面的字符串互为anagrams: A="mary" B="army" A="rocketboys" B="octobersky" A="codility" B="codility"
希望各位贴出自己的代码,下面是我写的,大家看看有问题么,希望大家改进。
package com.qustion;
import java.util.Arrays;
public class TestPalindrome {
/**
* @param args
* @author lohasle
* @time 2012/03/19
*/
// 判断 s的某种anagram是palindrome
public int isAnagramOfPalindrome(String str) {
char[] ch = splitString(str);
if (str != null) {
int[] sata = totalSee(ch);
if (sata[1] > 1) {
return 0;
} else {
if (sata[0] % 2 == 0||sata[1]==1) {
return 1;
} else {
return 0;
}
}
} else {
return 0;
}
}
// 拆分成字符数组 返回排好序的字符数组 为之后的遍历查找 赋值做准备
public char[] splitString(String str) {
int len = str.length();
char[] ch = new char[len];
for (int i = 0; i < len; i++) {
ch[i] = str.charAt(i);
}
for (int i = 0; i < ch.length - 1; i++) {
int minPos = i;// 记录最小的位置
for (int j = i + 1; j < ch.length; j++) {
if (ch[j] < ch[minPos]) {
minPos = j;
char temp = ch[minPos];
ch[minPos] = ch[i];
ch[i] = temp;
}
}
}
return ch;
}
// 统计相同的字母将它设值为一 统计相同字母出现的
public int[] totalSee(char[] ch) {
int len = ch.length;
int resultCountSame = 0;// 计算相同字母出现的总得次数
int countNoSame = 0;// 独立字母的总个数
int countSame = 1;//每一次查找 获得的相同字母总次数之和 不包括开头的哪一位
int[] a = new int[2];// 统计相同字母的总个数 和 独立字母的总个数
for (int i = 0; i < len; i+=countSame) {
for (int j = i + 1; j < len; j++) {
if (ch[j] !='1') {
if (ch[i] == ch[j]) {
countSame++;
ch[j] = '1';// 计算完之后 为了统计别 的字母 将值1作为标志
} else {
continue;
}
}
}ch[i] ='1';//这里是开始计算的首字母
}
for(int i = 0;i<len;i++){
if(ch[i]=='1'){
resultCountSame++;
}else{
countNoSame++;
}
}
a[0] = resultCountSame;
a[1] = countNoSame;
return a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
* String str = "aasasasaaa"; TestPalindrome te = new TestPalindrome();
* System.out.println(Arrays.toString(te.splitString(str)));
* System.out.println(Arrays.toString(str.split("a")));
*/
TestPalindrome te = new TestPalindrome();
String testStr = "kayak";
int result = te.isAnagramOfPalindrome(testStr);
System.out.println(result);
}
}
分享到:
相关推荐
原创一道Java笔试面试题考考大家!附带答案!
史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc... Java面试题及答案(基础题122道) - 在梦想与现实之间徘徊 - JavaEye技术网站.mht 等等,还有好多。
java面试题之行列转换 Oracle 和SQLServer两种方式 详细例子以及说明 一条语句实现,绝对看得懂! 方便理解!
企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...
【一线互联网大厂Java核心面试题库】Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等..
java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。
喜的是,别人没看到这些悉心整理的面试题你看到了;悲的是,面试你的面试官可能也看到了!前几天整理了很多关于面试的经典题目,例如Redis为什么是单线程的、SqlSessionTemplate是如何保证SqlSession线程安全性的、...
我们会一直不断地更新和充实该宝典,同时也希望读者朋友能够多多提供优质的面试题,也许下一个版本就有你提供的面试题哦。该宝典系统地整理了Java初级,中级,高级的基础知识,代码质量,解题思路,优化效率等面试要点,...
计算机后端-Java-Java核心基础-第21章 常用类 09. String的一道面试题.avi
3. 记一道字节跳动的算法面试题 4. 关于三次握手与四次挥手面试官想考我们什么?--- 不看后悔系列 5. 腾讯面试题:有了二叉查找树、平衡树为啥还需要红黑树? 6. 你真的了解 i++, ++i 和 i+++++i 以及 i+++i++ 吗...
主要介绍了阿里的一道Java并发面试题详解,网络、并发相关的知识,相对其他一些编程知识点更难一些,主要是不好调试并且涉及内容太多 !,需要的朋友可以参考下
本文给大家分享一道史上最难的一道Java面试题,非常不错,具有参考借鉴价值,需要的朋友参考下吧
java程序员求职之前看这一套就够了。包括Java程序员阿里面经等,java求职必备知识点,简历模板,JAVA核心知识点整理,蓝桥杯java历年真题及答案整理(共129道题目及答案),Java面试突击-V3.0
该宝典的一个明确目标是能够让 90%以上的 Java 技术面试题都落到该宝典中,如果您有不错的知识或者面试题, 您可以发送到 18046718767@163.cn,本人将不胜感激。让天下没有难学的知识,希望你我的努力能帮到更多的 ...
用java写一个函数判断字符串中"{"与"}"匹配? 提示:"{"与"}"必须同时出现,"{"必须在"}"前面,允许嵌套
2011年5月份参加腾讯校招的时候,一位工程师给的面试题。我觉得挺有意思的,拿出来,与君共勉
面试题通过一道题考一个专类方面的能力。说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由4个方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。从...
最新版Java面试宝典,精心提炼核心重点内容简化应用面试实战10秒一道,Java初级,高级,框架,底层原理,数据库,操作系统,微服务,IO,并发,JVM,容器,SpringBoot,SpringCloud,linx,面向对象,常用类,多线程,...
笔试题,使你面试的成功率大大提高,好好学习,文档的收集,认真分析每一道题。