小弟java新手
偶然在论坛上看到了一道面试题,题目如下:
问题: 如果给定的字符串从左到右和从右到左的序列完全一致,那么这样的字符串被称为 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);
}
}
分享到:
相关推荐
最全的j2EE面试题,题量...8、java面试题及答案 9、java面试题编程篇 10、Oracle面试题 11、Oracle企业面试题集锦 12、Spring面试题 13、SSH面试题 14、Strut+Spring+Hibernate面试题 15、张孝祥整理Java就业面试题大全
Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job.You.Love-人人都有好工作—IT行业求职面试必读.pdf Linux命令大全完整版.doc sql查询语句练习.doc Web服务器的工作...
"汇丰软件Java面试题详解" 汇丰软件Java面试题是许多IT行业新人的梦寐以求的岗位,需要考生具备扎实的Java基础知识和良好的编程能力。以下是对汇丰软件Java面试题的详细解析。 笔试部分 笔试部分主要包含三部分:...
java面试资料java面试题集java笔试题汇总资料,java面试资料java面试题集java笔试题汇总资料,java面试资料java面试题集java笔试题汇总资料,包括基础面试题、JavaWeb面试题、JAVA面试题集.txt、分布式相关面试题...
Java面试题以及答案(小生).pdf java面试题(题库全).doc JS 数据库答案.doc Land.the.Tech.Job.You.Love-人人都有好工作—IT行业求职面试必读.pdf Linux命令大全完整版.doc sql查询语句练习.doc Web服务器的工作...
这份"java笔记java笔试题 java面试题"的资源无疑是准备Java程序员的笔试和面试时的重要参考资料。以下是一些关键的Java知识点,这些内容可能会在笔记或面试中出现: 1. **Java基础**:Java的基础语法包括数据类型...