Tôi muốn kiểm tra xem chuỗi có phải là một palindrome hay không. Tôi muốn tìm hiểu một phương pháp dễ dàng để kiểm tra tương tự sử dụng ít nhất là chuỗi các thao tác có thểCách Java để kiểm tra xem chuỗi có phải là palindrome
Trả lời
Bạn có thể thử một cái gì đó như thế này:
String variable = ""; #write a string name
StringBuffer rev = new StringBuffer(variable).reverse();
String strRev = rev.toString();
if(variable.equalsIgnoreCase(strRev)) # Check the condition
Bạn cũng có thể thay thế^[a-z] để điều này có thể làm việc với những người bạn thân như "Madam, tôi là Adam". –
@ Alex K, nếu bạn không lo lắng về trường hợp nhạy cảm, thì câu của bạn là một palindrome. ;-) –
Dưới đây là một lớp học tốt:
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();
}
}
Thưởng thức.
công khai boolean isPalindrone (Chuỗi checkPalindrome) { \t \t \t \t int length = checkPalindrome.length(); \t \t int mid = length/2; \t \t int i, j = 0; \t \t \t \t for (i = 0, j = chiều dài-1; i
Sử dụng reverse
là quá mức cần thiết vì bạn không cần tạo thêm chuỗi, bạn chỉ cần truy vấn chuỗi hiện có. Ví dụ sau đây kiểm tra các ký tự đầu tiên và cuối cùng là như nhau, và sau đó đi sâu hơn bên trong chuỗi kiểm tra kết quả mỗi lần. Nó trả về ngay sau khi s
không phải là palindrome.
Sự cố với cách tiếp cận reverse
là tất cả đều hoạt động ở phía trước. Nó thực hiện một hành động đắt tiền trên một chuỗi, sau đó kiểm tra ký tự theo ký tự cho đến khi các chuỗi không bằng nhau và chỉ sau đó trả về false nếu nó không phải là một palindrome. Nếu bạn chỉ là so sánh các chuỗi nhỏ tất cả các thời gian thì điều này là tốt, nhưng nếu bạn muốn bảo vệ mình chống lại đầu vào lớn hơn thì bạn nên xem xét thuật toán này.
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;
}
Có lẽ là giải pháp nhanh nhất thực hiện. –
Giải pháp cao cấp! – buruzaemon
Có thể thay đổi giải pháp này để lấy ký tự làm đầu vào thay vì chuỗi không? Tôi đang tìm kiếm cùng một giải pháp palindrome nhưng với đầu vào ký tự. Tôi cũng có thể hỏi liệu vòng lặp For có thực sự kiểm tra từng ký tự từ một nửa chuỗi và so sánh chúng không? Cảm ơn –
Đối với các dòng mã ít nhất và trường hợp đơn giản
if(s.equals(new StringBuilder(s).reverse().toString())) // is a palindrome.
kiểm tra tình trạng này
Chuỗi string = "// một số chuỗi ... //"
séc này ... if (string.equals ((string.reverse()) { nó là palindrome }
' Chuỗi' không có phương thức 'đảo ngược'. –
Tôi đoán đây là cách đơn giản để kiểm tra palindrome
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;
}
Được sao chép từ đây http://stackoverflow.com/a/4138856/1740354. Đề cập đến nguồn sẽ là một ý tưởng tốt. –
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`````");
}}
}
Dưới đây là một trong những đơn giản"
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;
}
}
Tôi mới đến java và tôi chiếm câu hỏi của bạn cũng là một thách thức để cải thiện kiến thức của tôi, vì vậy hãy tha thứ cho tôi nếu điều này không trả lời tốt cho câu hỏi của bạn:
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;
}
}
}
}
- Nếu chuỗi được tạo thành không có chữ cái hoặc chỉ một chữ cái, nó là palindrome.
- Nếu không, hãy so sánh các chữ cái đầu tiên và cuối cùng của chuỗi.
- Nếu chữ cái đầu và cuối cùng khác nhau, thì chuỗi không phải là palindrome
- Nếu không, chữ cái đầu tiên và cuối cùng giống nhau. Tách chúng ra khỏi chuỗi và xác định xem chuỗi còn lại có phải là palindrome hay không. Lấy câu trả lời cho chuỗi nhỏ hơn này và sử dụng nó làm câu trả lời cho chuỗi gốc rồi lặp lại từ .
Chuỗi thao tác chỉ đang thay đổi chuỗi sang chữ hoa để bạn có thể nhập cái gì đó như 'XScsX'
public boolean isPalindrom(String text) {
StringBuffer stringBuffer = new StringBuffer(text);
return stringBuffer.reverse().toString().equals(text);
}
- 1. Cách Ruby để kiểm tra chuỗi palindrome
- 2. Kiểm tra xem một chuỗi có phải là số
- 3. Chức năng kiểm tra xem chuỗi có phải là ngày
- 4. java - Cách kiểm tra xem chuỗi có phải là tên phần tử XML hợp lệ không?
- 5. Kiểm tra xem đây có phải là
- 6. Kiểm tra xem biến có phải là ngày có Twig
- 7. Cách tốt hơn để kiểm tra xem chuỗi có phải là số nguyên trên iPhone không?
- 8. Cách kiểm tra xem tệp có phải là hình ảnh
- 9. Cách kiểm tra xem java.lang.reflect.Type có phải là Enum
- 10. Kiểm tra xem chuỗi có phải là một cách viết tắt có thể cho tên
- 11. Kiểm tra xem loại biến có phải là nguyên thủy
- 12. Cách kiểm tra xem biến có phải là số hay chuỗi không?
- 13. Python: Cách kiểm tra xem một chuỗi có phải là một IRI hợp lệ không?
- 14. Cách kiểm tra xem chuỗi có phải là URL HTTP hợp lệ không?
- 15. Cách kiểm tra xem ký tự trong chuỗi có phải là một chữ cái không? Python
- 16. Cách kiểm tra xem ký tự Java có phải là ký hiệu tiền tệ không
- 17. Cách kiểm tra xem chuỗi có phải là một trong các giá trị đã biết không?
- 18. Làm cách nào để xác thực xem chuỗi có phải là biến java hợp lệ không?
- 19. cách nhanh chóng để kiểm tra xem một chuỗi ký tự không phải là số
- 20. PHP kiểm tra xem tệp có phải là hình ảnh
- 21. Kiểm tra xem luồng có phải là tệp zip
- 22. Kiểm tra xem hình ảnh có phải là JPEG
- 23. Kiểm tra xem NSURL có phải là Tệp cục bộ
- 24. Kiểm tra xem đối tượng Ruby có phải là Boolean
- 25. Kiểm tra xem char có phải là một dòng mới
- 26. Kiểm tra xem cửa sổ có phải là MessageBox
- 27. C#: Kiểm tra xem loại T có phải là bool
- 28. Kiểm tra xem có phải là một đối tượng
- 29. Ruby: Kiểm tra xem URI có phải là HTTPS không?
- 30. Kiểm tra xem chuỗi có chứa số
http://stackoverflow.com/questions/248161/palindrome -detection-efficiency – Andy
@Andy: Đó là để phát hiện hiệu quả giống nhau. Tôi muốn mã theo cách đơn giản với ít nhất số dòng mã và phương pháp được sử dụng !! –