• 算法——回文(palindrome)


    回文(palindrome):指的是从头读到尾与从尾读到头一模一样的字符串。

    分别在C、Java与Python实现回文检测:

    C:

    #include <stdio.h>
    #include <stdbool.h>
    #include <ctype.h>
    
    #define MAX_LEN 255
    
    int main(int argc, char *args[]){
        char message[MAX_LEN];
        char str[MAX_LEN];
        char ch;
        int index = 0;
    
        printf("Please enter a message: ");
        while((ch = getchar()) != '
    '){
            if(index==MAX_LEN){
                while(getchar() != '
    '){
                    continue;
                }
                break;
            }else{
                message[index++] = ch;
            }
        }
    
        int j = 0;
        for(int i = 0; i < index; i++){
            ch = message[i];
            if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
                str[j++] = tolower(ch);
            }    
        }
    
        for(int i = 0; i < j / 2; i++){
            if(str[i] != str[j-i-1]){
                puts("Not a Palindrome!");
                return 1;
            }
        }
        puts("Palindrome!");
        
        return 0;
    }

    Java:

    import java.util.Scanner;
    
    public class Palindrome{
        public static boolean isPalindrome(String raw){
            String str = "";
            // 只拿raw字符串里的字母,拼接到str里
            for(int i = 0; i < raw.length(); i++){
                char ch = raw.charAt(i);
                if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')){
                    str += ch;
                }
            }
            // str字母全部小写化
            str = str.toLowerCase();
            // 判断是否为回文
            int end = str.length();
            for(int i = 0; i < end/2; i++){
                if(str.charAt(i) != str.charAt(end-i-1)){
                    return false;
                }
            }
    
            return true;
        }
    
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
    
            // I prefer pi!
            // A man, a plan, a canal: Panama!
            // Madam, I am Adam.
            System.out.printf("Enter a message: ");
            String str = scanner.nextLine();
    
            if(isPalindrome(str)){
                System.out.println("Palindrome!");
            }else{
                System.out.println("Not a palindrome!");
            }
        }
    }

    Python:

    import string
    
    def is_palindrome(text: str) -> bool:
        '是否为回文'
        # 1、先去除标点符号以及空格,并将所有字母小写化
        result = ''
        for i in range(len(text)):
            if not text[i] in string.punctuation + ' ':    
                result += text[i].lower()
        print(result)
    
        # 2、判断是否为回文
        n = len(result)
        for i in range(len(result) // 2):
            if result[i] != result[n-i-1]:
                return False
        return True
    
    
    if __name__ == '__main__':
        print(is_palindrome('I prefer pi.'))
        print(is_palindrome('A man, a plan, a canal: Panama.'))
        print(is_palindrome('Resistance is futile!'))
        
    Resistance is Futile!
  • 相关阅读:
    Educational Codeforces Round 19 题解【ABCDE】
    喵哈哈村的魔法考试 Round #14 (Div.2) 题解
    Codeforces Round #408 (Div. 2) 题解【ABCDE】
    喵哈哈村的魔法考试 Round #13 (Div.2) 题解
    喵哈哈村的魔法考试 Round #12 (Div.2) 题解
    April Fools Contest 2017 题解
    Kaggle Titanic solution 纯规则学习
    喵哈哈村的魔法考试 Round #11 (Div.2) 题解
    Codeforces Round #406 (Div. 1) B. Legacy 线段树建图跑最短路
    Codeforces Round #407 div2 题解【ABCDE】
  • 原文地址:https://www.cnblogs.com/noonjuan/p/11407841.html
Copyright © 2020-2023  润新知