Upv*_*ote 86 java arrays string char palindrome
甲回文是单词,短语,数字或的单元的其它序列可以读取在任一方向的方式相同.
为了检查单词是否是回文,我得到单词的字符数组并比较字符.我测试了它似乎工作.但是我想知道它是否正确或是否有待改进的地方.
这是我的代码:
public class Aufg1 {
public static void main(String[] args) {
String wort = "reliefpfpfeiller";
char[] warray = wort.toCharArray();
System.out.println(istPalindrom(warray));
}
public static boolean istPalindrom(char[] wort){
boolean palindrom = false;
if(wort.length%2 == 0){
for(int i = 0; i < wort.length/2-1; i++){
if(wort[i] != wort[wort.length-i-1]){
return false;
}else{
palindrom = true;
}
}
}else{
for(int i = 0; i < (wort.length-1)/2-1; i++){
if(wort[i] != wort[wort.length-i-1]){
return false;
}else{
palindrom = true;
}
}
}
return palindrom;
}
}
Run Code Online (Sandbox Code Playgroud)
dcp*_*dcp 176
为什么不呢:
public static boolean istPalindrom(char[] word){
int i1 = 0;
int i2 = word.length - 1;
while (i2 > i1) {
if (word[i1] != word[i2]) {
return false;
}
++i1;
--i2;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
例:
输入是"andna".
i1为0,i2为4.
第一次循环迭代我们将比较word[0]和word[4].它们是相等的,所以我们递增i1(它现在是1)并递减i2(它现在是3).
所以我们然后比较n的.它们是相等的,所以我们递增i1(它现在是2)并递减i2(它是2).
现在i1和i2相等(它们都是2),因此while循环的条件不再成立,因此循环终止并返回true.
Gre*_*reg 114
您可以通过将字符串与其自身的反向进行比较来检查字符串是否为回文:
public static boolean isPalindrome(String str) {
return str.equals(new StringBuilder(str).reverse().toString());
}
Run Code Online (Sandbox Code Playgroud)
或者对于早于1.5的Java版本,
public static boolean isPalindrome(String str) {
return str.equals(new StringBuffer().append(str).reverse().toString());
}
Run Code Online (Sandbox Code Playgroud)
编辑: @FernandoPelliccioni 在时间和空间方面对该解决方案的效率(或缺乏效率)提供了非常全面的分析.如果您对此问题的计算复杂性以及此问题的其他可能解决方案感兴趣,请阅读它!
And*_*Mao 60
一个简洁的版本,不涉及(低效率)初始化一堆对象:
boolean isPalindrome(String str) {
int n = str.length();
for( int i = 0; i < n/2; i++ )
if (str.charAt(i) != str.charAt(n-i-1)) return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
Kei*_*OYS 17
或者,递归.
对于正在寻找更短的递归解决方案的任何人,检查给定的字符串是否满足作为回文:
private boolean isPalindrome(String s) {
int length = s.length();
if (length < 2) // If the string only has 1 char or is empty
return true;
else {
// Check opposite ends of the string for equality
if (s.charAt(0) != s.charAt(length - 1))
return false;
// Function call for string with the two ends snipped off
else
return isPalindrome(s.substring(1, length - 1));
}
}
Run Code Online (Sandbox Code Playgroud)
或者更短,如果您愿意:
private boolean isPalindrome(String s) {
int length = s.length();
if (length < 2) return true;
return s.charAt(0) != s.charAt(length - 1) ? false :
isPalindrome(s.substring(1, length - 1));
}
Run Code Online (Sandbox Code Playgroud)
Fra*_*rez 10
Go,Java:
public boolean isPalindrome (String word) {
String myWord = word.replaceAll("\\s+","");
String reverse = new StringBuffer(myWord).reverse().toString();
return reverse.equalsIgnoreCase(myWord);
}
isPalindrome("Never Odd or Even"); // True
isPalindrome("Never Odd or Even1"); // False
Run Code Online (Sandbox Code Playgroud)