偶然在论坛上看到了一道面试题,题目如下:
问题: 如果给定的字符串从左到右和从右到左的序列完全一致,那么这样的字符串被称为 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面试相关的知识点。下面将详细解析每一道题目涉及的关键概念。 ### 第一部分:基础知识 #### 1. final, finally, finalize的区别 - **final**: 用于声明变量、方法...
### 常见的Java上机面试题:深入解析与实战指南 在IT行业的求职过程中,尤其是对于软件工程师或开发者而言,上机编程面试成为了一道必经的门槛。这种形式的面试旨在全面评估应聘者的技术能力,不仅考察理论知识的...
根据提供的文件信息,我们可以分析出这是一道关于Java继承与方法重写的相关笔试面试题。题目涉及到了Java类的继承、方法重写、实例化对象时的调用顺序以及对象多态性等知识点。接下来,我们将对这些知识点进行详细的...
史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc... Java面试题及答案(基础题122道) - 在梦想与现实之间徘徊 - JavaEye技术网站.mht 等等,还有好多。
Java面试题涵盖了许多核心知识点,包括基础技术、项目经验、逻辑推理和SQL查询。下面将对这些方面进行详细的解析。 1. **基础技术题** - **UML图**:UML(统一建模语言)有多种图表,包括类图、对象图、用例图、...
这是一道经典的Java面试题。解决这个问题需要了解Java的内存管理机制,包括FULL GC的触发条件、Perm Gen的设置、System.gc()方法的调用等。 Java集合框架 3. Java集合框架是Java语言中的一种重要概念,它提供了...
企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...
### Java面试题:行列转换详解 #### 一、问题背景 在进行数据分析或者报表处理时,经常需要将数据从一种格式转换成另一种格式以便更好地展示或分析。其中一种常见的转换需求是从行转列(即行列转换)。本篇文章将...
【一线互联网大厂Java核心面试题库】Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等..
java截取字符串,一道面试题。好像没有找到正确答案,今天找时间做了一个,仅供参考。本人运行过了。
JAVA面试题选择原则 - **筛选标准**:为了提高复习效率,本面试题集筛选掉了那些过时或者出现频率极低的问题,确保每一道题目都有实际的价值。 - **回答策略**:建议的答题方法包括三个方面:首先阐述基础知识,...
笔试面试题 一道面试题关于信息系统的问答和注意事项 【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的...
"java面试题_leetcode题解之第31题下一个排列" 的描述进一步确认了这是关于Java面试中的一道算法题目的解答,主要关注如何找到一个排列的下一个排列。在面试中,这样的问题通常用来评估候选人在处理数组操作和算法...
Java程序员在面试中可能会...理解这些Java面试题的解答可以帮助面试者更好地准备面试,加深对Java核心概念的理解,并展示他们在实际开发中的应用能力。对于Java程序员来说,扎实的基础知识和实践经验都是至关重要的。
我们会一直不断地更新和充实该宝典,同时也希望读者朋友能够多多提供优质的面试题,也许下一个版本就有你提供的面试题哦。该宝典系统地整理了Java初级,中级,高级的基础知识,代码质量,解题思路,优化效率等面试要点,...
计算机后端-Java-Java核心基础-第21章 常用类 09. String的一道面试题.avi
【华为Java面试题详解】 1. **数组排序与字符串处理** 在这道题中,你需要接收一个包含多个数字的字符串,这些数字由逗号分隔。首先,我们需要使用`splitStringByComma`方法将字符串拆分成一个整数数组。这个方法...