[英]Java: How to create the shortest palindrome of a string by inserting the minimum number of characters?
[英]How to create a palindrome off a string that is INSIDE of an array
我應該將數組arr的每個元素都更改為回文。
我嘗試過創建一個for循環來創建一個新的數組,並嘗試了另一個for循環來從該數組的元素中創建一個回文,但是顯然它並沒有真正起作用。
public static String [] changeArrayToPalindrome(String [] arr){
int length =arr.length;
String[]newarray= new String[length];
for(int i=0; i<length; i++){
String a=arr[i];
int n=a.length();
if(a==null){
System.out.println("null");
}
else if(a.equals("")){
System.out.println("");
}
String newString="";
for(int j=0; j<=n/2-1; j++){
newString+=a.charAt(j);
newString+=a.charAt(n/2+j);
newarray[j]=newString;
}
}
return newarray;
}
測試員是
String [] array={"street", null, "break", "oha", "", "pit", null,"atOyotA"};
System.out.println(Arrays.toString(changeArrayToPalindrome(array)));
應該打印出來
//[street, null, break, oha, , pit, null, atOyotA]
//[strrts, null, brerb, oho, , pip, null, atOyOta]
我知道我不應該將System.out.println放置為null或空字符串,但是我不知道如何將其作為return語句。
任何幫助實現任務目的的幫助將不勝感激。
這是一個更簡單的方法:
public static void main(String[] args) {
String[] strings = {"abc", null, "abcdef"};
List<String> collect = Arrays.stream(strings)
.map(s -> s == null ? s : s.substring(0, (s.length() + 1) / 2) + reverseStringForPalin(s.substring(0, s.length() % 2 == 0 ? (s.length() + 1) / 2 : ((s.length() + 1) / 2) - 1)))
.collect(Collectors.toList());
System.out.println(collect);
}
private static String reverseStringForPalin(String s) {
StringBuilder stringBuilder = new StringBuilder(s);
return stringBuilder.reverse().toString();
}
如果您不想使用StringBuilder
:
private static String reverseStringForPalin(String s) {
String reversed = "";
for (int i = s.length() - 1; i >= 0; i--) {
reversed += s.charAt(i);
}
return reversed;
}
更新
基本上, map
要做的是獲取一個對象並將其轉換為另一個對象。 但是,如果你不想使用它,只需將轉換streams
以傳統for
:
public static void main(String[] args) {
String[] strings = {"abc", null, "abcdef"};
String[] output = new String[strings.length];
for (int i = 0; i < strings.length; ++i) {
if (strings[i] == null) {
output[i] = null;
} else {
final String s = strings[i];
output[i] = s.substring(0, (s.length() + 1) / 2) + reverseStringForPalin(s.substring(0, s.length() % 2 == 0 ? (s.length() + 1) / 2 : ((s.length() + 1) / 2) - 1));
}
}
這是子字符串的代碼(直接來自Java):
public String substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > value.length) {
throw new StringIndexOutOfBoundsException(endIndex);
}
int subLen = endIndex - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return ((beginIndex == 0) && (endIndex == value.length)) ? this
: new String(value, beginIndex, subLen);
}
您的代碼可以更新為此。
import java.util.Arrays;
public class Test {
public static String [] changeArrayToPalindrome(String [] arr){
int length =arr.length;
String[]newarray= new String[length];
for(int i=0; i<length; i++){
String a=arr[i];
if(a==null){
newarray[i]=null;
}
else if(a.equals("")){
newarray[i]="";
} else {
int n=a.length();
String newString="";
if (n%2==0) {
//for even
newString=a.substring(0,n/2);
} else {
newString=a.substring(0,n/2+1);
}
for(int j=n/2-1; j>=0; j--){
newString+=a.charAt(j);
}
newarray[i]=newString;
}
}
return newarray;
}
public static void main(String[] args) {
String [] array={"street", null, "break", "oha", "", "pit", null,"atOyotA"};
System.out.println(Arrays.toString(changeArrayToPalindrome(array)));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.