Chcę sprawdzić, czy ciąg jest palindrom, czy nie. Chciałbym dowiedzieć się łatwy sposób sprawdzić te same przy wykorzystaniu najmniej możliwe manipulacje ciągSposób Java, aby sprawdzić, czy ciąg jest palindromem
Odpowiedz
Można spróbować czegoś takiego:
String variable = ""; #write a string name
StringBuffer rev = new StringBuffer(variable).reverse();
String strRev = rev.toString();
if(variable.equalsIgnoreCase(strRev)) # Check the condition
Można również zastąpić^[a-z], więc działałoby to z palindromami typu "Pani, jestem Adam". –
@Alex K, jeśli nie martwisz się o rozróżnianie wielkości liter, twoje zdanie jest palindromem. ;-) –
Oto dobra klasa:
public class Palindrome {
public static boolean isPalindrome(String stringToTest) {
String workingCopy = removeJunk(stringToTest);
String reversedCopy = reverse(workingCopy);
return reversedCopy.equalsIgnoreCase(workingCopy);
}
protected static String removeJunk(String string) {
int i, len = string.length();
StringBuffer dest = new StringBuffer(len);
char c;
for (i = (len - 1); i >= 0; i--) {
c = string.charAt(i);
if (Character.isLetterOrDigit(c)) {
dest.append(c);
}
}
return dest.toString();
}
protected static String reverse(String string) {
StringBuffer sb = new StringBuffer(string);
return sb.reverse().toString();
}
public static void main(String[] args) {
String string = "Madam, I'm Adam.";
System.out.println();
System.out.println("Testing whether the following "
+ "string is a palindrome:");
System.out.println(" " + string);
System.out.println();
if (isPalindrome(string)) {
System.out.println("It IS a palindrome!");
} else {
System.out.println("It is NOT a palindrome!");
}
System.out.println();
}
}
Enjoy.
public boolean isPalindrone (String checkPalindrome) { \t \t \t \t int length = checkPalindrome.length(); \t int mid = długość/2; \t \t int i, j = 0; \t \t \t \t for (i = 0, j = długość 1; i
Korzystanie z reverse
jest przesadą, ponieważ nie trzeba generować dodatkowego ciągu, wystarczy zapytać istniejący. Poniższy przykład sprawdza, czy pierwsze i ostatnie znaki są takie same, a następnie idzie dalej wewnątrz łańcucha, sprawdzając wyniki za każdym razem. Powraca, gdy tylko s
nie jest palindromem.
Problem z podejściem reverse
polega na tym, że wykonuje całą pracę z góry. Wykonuje on kosztowną akcję na łańcuchu, a następnie sprawdza znak po znaku, aż ciągi nie będą równe i tylko wtedy zwróci wartość false, jeśli nie jest palindromem. Jeśli po prostu porównujesz małe ciągi przez cały czas, jest to w porządku, ale jeśli chcesz bronić się przed większymi danymi wejściowymi, powinieneś rozważyć ten algorytm.
boolean isPalindrome(String s) {
int n = s.length();
for (int i = 0; i < (n/2); ++i) {
if (s.charAt(i) != s.charAt(n - i - 1)) {
return false;
}
}
return true;
}
Prawdopodobnie najszybsze rozwiązanie w działaniu. –
Doskonałe rozwiązanie! – buruzaemon
Czy to rozwiązanie może zostać zmienione, aby wprowadzić znak jako dane wejściowe, a nie ciąg znaków? Szukam tego samego rozwiązania palindromowego, ale z wprowadzeniem znaku. Czy mogę zapytać, czy pętla For rzeczywiście sprawdza każdy znak od połowy łańcucha i porównuje je? Dzięki –
dla najsłabiej linii kodu i najprostszym przypadku
if(s.equals(new StringBuilder(s).reverse().toString())) // is a palindrome.
sprawdzić ten warunek
String String = "// jakiś ciąg ... //"
check to ... if (string.equals ((string.reverse()) { jest palindromem }
' Ciąg' nie ma metody 'odwrotnej'. –
Chyba jest to prosty sposób na sprawdzenie palindrom
String strToRevrse = "MOM";
strToRevrse.equalsIgnoreCase(new StringBuilder(strToRevrse).reverse().toString());
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;
}
Powielony tutaj http://stackoverflow.com/a/4138856/1740354. Wspomnienie źródła byłoby dobrym pomysłem. –
import java.util.Scanner;
public class FindAllPalindromes {
static String longestPalindrome;
public String oldPalindrome="";
static int longest;
public void allSubstrings(String s){
for(int i=0;i<s.length();i++){
for(int j=1;j<=s.length()-i;j++){
String subString=s.substring(i, i+j);
palindrome(subString);
}
}
}
public void palindrome(String sub){
System.out.println("String to b checked is "+sub);
StringBuilder sb=new StringBuilder();
sb.append(sub); // append string to string builder
sb.reverse();
if(sub.equals(sb.toString())){ // palindrome condition
System.out.println("the given String :"+sub+" is a palindrome");
longestPalindrome(sub);
}
else{
System.out.println("the string "+sub+"iss not a palindrome");
}
}
public void longestPalindrome(String s){
if(s.length()>longest){
longest=s.length();
longestPalindrome=s;
}
else if (s.length()==longest){
oldPalindrome=longestPalindrome;
longestPalindrome=s;
}
}
public static void main(String[] args) {
FindAllPalindromes fp=new FindAllPalindromes();
Scanner sc=new Scanner(System.in);
System.out.println("Enter the String ::");
String s=sc.nextLine();
fp.allSubstrings(s);
sc.close();
if(fp.oldPalindrome.length()>0){
System.out.println(longestPalindrome+"and"+fp.oldPalindrome+":is the longest palindrome");
}
else{
System.out.println(longestPalindrome+":is the longest palindrome`````");
}}
}
Oto prosta”
public class Palindrome {
public static void main(String [] args){
Palindrome pn = new Palindrome();
if(pn.isPalindrome("ABBA")){
System.out.println("Palindrome");
} else {
System.out.println("Not Palindrome");
}
}
public boolean isPalindrome(String original){
int i = original.length()-1;
int j=0;
while(i > j) {
if(original.charAt(i) != original.charAt(j)) {
return false;
}
i--;
j++;
}
return true;
}
}
Jestem nowy Java i zabieram się Twoje pytanie jako wyzwanie do poprawy mojej wiedzy, więc proszę wybacz mi, jeśli to nie odpowie dobrze na twoje pytanie:
import java.util.ArrayList;
import java.util.List;
public class PalindromeRecursiveBoolean {
public static boolean isPalindrome(String str) {
str = str.toUpperCase();
char[] strChars = str.toCharArray();
List<Character> word = new ArrayList<>();
for (char c : strChars) {
word.add(c);
}
while (true) {
if ((word.size() == 1) || (word.size() == 0)) {
return true;
}
if (word.get(0) == word.get(word.size() - 1)) {
word.remove(0);
word.remove(word.size() - 1);
} else {
return false;
}
}
}
}
- Jeśli łańcuch jest wykonana bez liter lub tylko jedna litera, to palindrom.
- W przeciwnym razie porównaj pierwszą i ostatnią literę ciągu.
- Jeżeli pierwsze i ostatnie litery różnią się, wówczas ciąg nie jest palindrom
- W przeciwnym razie, pierwsze i ostatnie litery są takie same. Usuń je ze sznurka i sprawdź, czy pozostała struna to palindrom. Weź odpowiedź na ten mniejszy ciąg i użyj go jako odpowiedzi na oryginalny ciąg, a następnie powtórz od .
Jedynym manipulacji ciąg zmienia ciąg na duże litery, tak że można wprowadzić coś takiego jak 'XScsX'
public boolean isPalindrom(String text) {
StringBuffer stringBuffer = new StringBuffer(text);
return stringBuffer.reverse().toString().equals(text);
}
- 1. jak sprawdzić, czy słowo jest palindromem?
- 2. Programowo sprawdź, czy liczba jest palindromem
- 3. Aby sprawdzić, czy ciąg zawiera określone słowo
- 4. Jak sprawdzić, czy ciąg znaków jest prawidłową zmienną języka Java?
- 5. Jak sprawdzić, czy ciąg znaków jest xml?
- 6. Jak sprawdzić, czy ciąg jest numeryczny?
- 7. Sposób by sprawdzić czy CapsLock jest lub nie w java
- 8. Czy istnieje sposób, aby sprawdzić, czy wartości nie numerycznej makro
- 9. Jak sprawdzić, czy klasa Java jest abstrakcyjna?
- 10. Jak sprawdzić, czy Java Future jest kompletna?
- 11. Regex, aby sprawdzić, czy liczba jest równa
- 12. poprawny sposób sprawdzić, czy typ jest Nullable
- 13. Jak sprawdzić, czy ścieżka jest względna lub bezwzględna w java
- 14. Java - Jak sprawdzić, czy nazwa pliku jest poprawna?
- 15. Jaki jest complicant RFC i pracy wyrażenia regularnego, aby sprawdzić, czy ciąg jest prawidłowy adres URL
- 16. Czy istnieje zadanie MSBuild, aby sprawdzić, czy ciąg zawiera inny ciąg (podobny do string.contains)
- 17. java - Jak sprawdzić, czy ciąg zawiera zarówno literę i numer
- 18. Jak sprawdzić, czy ciąg znaków leży w pewnym zakresie. (Java)
- 19. sprawdzić, czy ciąg w kolumnie dataframe pandy jest na liście
- 20. W języku Java, w jaki sposób sprawdzić, czy ciąg zawiera podłańcuch (ignorowanie przypadku)?
- 21. Szybki sposób w PHP, aby sprawdzić, czy wartość jest w formacie datetime MySQL?
- 22. Java - Jak sprawdzić, czy podział jest liczbą całkowitą czy zmiennoprzecinkową?
- 23. Jak sprawdzić, czy ciąg znaków nie jest pusty?
- 24. Jak sprawdzić, czy ciąg znaków jest pusty w Emacs Lisp?
- 25. Python: Jak sprawdzić, czy ciąg jest prawidłowym IRI?
- 26. Czy istnieje sposób, aby programowo sprawdzić status trybu samolotowego?
- 27. Jak sprawdzić, czy ciąg znaków jest jsonem w modelu Railsowym
- 28. Czy ktoś zna składnik Java, aby sprawdzić, czy adres IP jest z określonej sieci/maski sieci?
- 29. Java - czy jest jakikolwiek powód, aby sprawdzić, czy singleton ma dwukrotnie wartość null?
- 30. Jak sprawdzić, czy ciąg nie jest równy obiekt lub inne wartości ciągu w java?
http://stackoverflow.com/questions/248161/palindrome -detekcja-efektywność – Andy
@Andy: To jest wykrywanie wydajności tego samego. Chcę kod w najprostszy sposób z najmniejszą liczbą linii kodów i metod! –