2015-04-16 86 views
0

我的任務就是看一個字符串是否是迴文,所以我只是將使用一個for循環,並添加每個人物在我的新的字符串,然後下一次循環的下一個字符將被放置在[0],所有其他元素將被推回1個點,所以最後新的字符串將與輸入字符串相反,然後我會比較這兩個字符串,如果它們是=,那麼它會打印出來「這是一個迴文」,否則會打印出「它不是迴文」。JAVA:如何將新元素添加到字符串中,將所有其他元素重新加入?

我不能使用字符串反向方法,我需要扭轉字符串自己。我已經搜遍了,我無法找到答案。

這裏是我的代碼至今:

class PrimaryClass{ 

Scanner str = new Scanner(System.in); 

String palindrome(String str){ 

    str.toCharArray(); 
    char[] arr = new char[str.length()]; 
    String reverse = ""; 

    for (int i = str.length(); i >= 0; i--){ 

    } 



    return str; 
} 

在無論指數是的,我需要的地方那就是字符串索引「反向」的角色,並推動所有其他字符背部。

+3

這可能有助於:http://stackoverflow.com/search?q=[java]+string+palindrome – Tom

+0

檢查此:http://stackoverflow.com/questions/7569335/reverse-a-string-在Java的。另外,如果您不需要創建另一個字符串副本,則有更好的方法來完成此任務。 – George

+1

1提示:你不需要扭轉你的字符串來測試它是否是迴文。有一個更好的方法來做到這一點 – ControlAltDel

回答

0

這是低效建立一個字符串的備份來解決這個問題。更聰明的解決方案是使用單個循環來檢查字符串的第一個和最後一個字符,然後是第二個和第二個,以及如此等等,如果任何一對字符不匹配,則返回false,如果全部匹配,則爲真。

不要忘了中途停止,因爲它是低效的做同樣的檢查兩次。不要忘記,奇數字符意味着中間字符可以是任何東西,因爲它與其他任何東西都沒有配對。

1

你必須在「推」的角色來考慮這個沒有回來。而是要麼創建一個新的字符數組並交換它們,然後比較或使用一個字符串。雖然,字符串是不可變在Java中,當你添加一個字符串,實際上是創造了一個新的字符串,現在你的變量指向。因此,爲了您的目的,這並不重要。 當然,繼續製作新字符串並連接到它是低效的

正如你所說的,對一個for循環來說,顛倒一個字符數組(就是一個字符串)就是這樣完成的。

for (int i = length - 1; i >= 0; i--) 
    reverse = reverse + original.charAt(i); //inefficient concatenation. 

在這之後,你只需要比較扭轉和原來,這兩個都是字符串,通過original.equals(reverse)

做你確定你想尋找一個解決方案嗎? this is the first link on Google,適合開荒者。

不同注意(如果你正在做數據結構),你也可以使用堆棧來檢查一個字符串是否是迴文,首先將它作爲字符數組,然後將每個字符推到堆疊,然後再次彈出並隨時比較每個字符。這對你來說可能是一個有趣的方法。

最後,反轉字符串是一種常見的編程面試問題,尤其是不使用額外內存的就地反轉。有些東西你可能想知道,所以請記住,找到解決方案很容易,但要在採訪中自己實現它們,你必須親自學習算法的基本原理。只是額外的信息。

+2

編譯器優化「壞」字符串連接 – duffy356

+0

@ duffy356有趣。你有這個來源嗎?我會盡快查看。 – matrixanomaly

+0

但並非每個編譯器都這樣做。嘗試一下 – duffy356

0

你應該分配char[] arr = str.toCharArray();和循環將

for (int i = str.length(); i > 0; i--){ 
    reverse += arr[i-1] 
} 

終於reverse將有逆轉的字符串。

0

這裏是Bobulous在談論,不使用臨時數組:

public class Test { 
    public static void main(String[] args) { 
    if(args.length != 1) { 
     System.out.println("Please provide a string to check for palindrome."); 
     return; 
    } 

    System.out.format("Is \"%s\" a palindrome ? : %b\n", args[0], isPalindrome(args[0])); 

    } 

    private static boolean isPalindrome(String string) { 
    int forwardI = 0; 
    int backwardI = string.length()-1; // last character 
    while(forwardI < backwardI) { 
     if(string.charAt(forwardI++) != string.charAt(backwardI--)) { 
     return false; 
     } 
    } 
    return true; 
    } 
} 

現在你欠我一杯啤酒。和一個到Bobulous :)

0

你想檢查字符串是迴文?試試這個:

public static boolean isPalindrome(String str) { 
    return str.equals(new StringBuilder(str).reverse().toString()); 
} 

另一種解決方案:

public static boolean isPalindrome(String str){ 
    char[] word = str.toCharArray(); 
    int i1 = 0; 
    int i2 = word.length - 1; 
    while (i2 > i1) { 
     if (word[i1] != word[i2]) { 
      return false; 
     } 
     ++i1; 
     --i2; 
    } 
    return true; 
} 
+0

他提到:「我不允許使用字符串反向方法」 我覺得StringBuilder的反向方法可能是不允許的:P – baraber

0

如果你只是測試一個迴文之前扭轉字符串的字符,請連結而字母串字母倒退到一個新的變量。

像這樣:

var word = "Hello World" 
var palindrome = "" 
for (i = word.length - 1 ; i >= 0 ; i--){ 
palindrome = palindrome + word[i]; 
} 

這應該很好地工作,如果做兩個變量之間的平等字符串的測試......在我的情況下,字符串是不是迴文。 :)

相關問題