首页 > 试题广场 >

回文字符串

[编程题]回文字符串
  • 热度指数:23057 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给出一个长度不超过1000的字符串,判断它是不是回文(顺读,逆读均相同)的。

输入描述:
输入包括一行字符串,其长度不超过1000。


输出描述:
可能有多组测试数据,对于每组数据,如果是回文字符串则输出"Yes!”,否则输出"No!"。
示例1

输入

hellolleh
helloworld

输出

Yes!
No!

python solution:

while True:
    try:
        a=input()
        print("Yes!" if a==a[::-1] else "No!")
    except:
        break
发表于 2017-10-01 17:01:28 回复(1)
#include <stdio.h>
#include <string.h>
int main(){
	int i,j;
	char a[1005];
	while(scanf("%s",a) != EOF){
		int flag=0;
		for(i=0,j=strlen(a)-1; i<=j; i++,j--){
			if(a[i] != a[j]){
				printf("No!\n");
				flag=1;
				break;
			}
		}
		if(flag==0){
			printf("Yes!\n");
		}
	}
	return 0;
} 

发表于 2017-02-14 10:36:11 回复(6)
import java.util.*; public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            String str = in.nextLine();
            boolean isPal = true;
            for(int i = 0, j = str.length()-1; i < j; i++, j--){
                if(str.charAt(i) != str.charAt(j)){
                    System.out.println("No!");
                    isPal = false;
                    break;
                }
            }
            if(isPal){
                System.out.println("Yes!");
            }
        }
    }
}

发表于 2017-05-20 19:20:15 回复(0)
try:
    while True:
        line = raw_input()
        if line[:] == line[::-1]:
            print 'Yes!'
        else:
            print 'No!'
except:
    pass
发表于 2017-05-03 22:30:06 回复(0)
 import java.util.Scanner;
/**
*回文串就是一串字符正反序一样,所以将原来的字符串倒叙以后和原先字符串匹配则就是回文串
*字符串倒叙可直接用str.reverse()
*/ 
public class Main {
 
    public static void main(String[] args) {
    		Scanner scan=new Scanner(System.in);
    		while(scan.hasNext()){
            String str=scan.nextLine();                
            StringBuilder sb=new StringBuilder(str);
            String newStr = sb.reverse().toString();
               
            if(str.equals(newStr)){
            	System.out.println("Yes!");
            }else{
            	System.out.println("No!");
            }
    }
}
}

发表于 2017-01-18 14:52:10 回复(0)
#include <stdio.h>
#include <string.h>
int main(){
    char s[1000];
    int i,n,flag;
    while(scanf("%s",s)!=EOF){
        flag=0;
        n=strlen(s);
        for(i=0;i<n/2;i++){
            if(s[i]!=s[n-i-1]){
                flag=1;
                break;
            }
        }
        if(flag==1)
            printf("No!\n");
        if(flag==0)
            printf("Yes!\n");
    }
}
发表于 2018-04-13 17:24:22 回复(0)
#include<stdio.h>
(737)#include<string.h>
int main()
{
    char a[1000],n,key=1,i;
    scanf("%s",a);
    n=strlen(a)-1;
    for(i=0;i<n/2;i++)
        if(a[i]!=a[n--])
        {key=0;break;}
    if(key) printf("Yes!");
    else printf("No!");
}

发表于 2020-03-30 20:27:40 回复(0)
Java 解法一
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            String s = scanner.next();
            System.out.println(new StringBuilder(s).reverse().toString().equals(s)?"Yes!":"No!");
        }
    }
}

Java解法二
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String s = scanner.nextLine();
            int i = 0;
            int j = s.length() - 1;
            while (i <= j) {
                if (s.charAt(i) == s.charAt(j)) {
                    i++;
                    j--;
                } else break;
            }
            System.out.println(i > j ? "Yes!" : "No!");
        }

    }
}



发表于 2020-03-17 16:54:48 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main() {
    char s[1000];
    scanf("%s", s);
    int n = 0;
    while(s[n] != '\0') {
        n++;
    }
    int len = n-1;
    int i = 0, j = len;
    int flag = 1;
    while(i < j) {
        if(s[i++] != s[j--]) {
            flag = 0;
            break;
        }
    }
    flag == 1? printf("Yes!"):printf("No!");
    return 0;
}
编辑于 2020-03-15 16:13:11 回复(0)
#include <iostream>
#include <string>
using namespace std;

int main(){
    string str;
    bool flag;
    while(cin>>str){
        string::size_type pos1=0,pos2=str.size()-1;
        flag=true;
        while(pos1<=pos2){
            if(str[pos1++]!=str[pos2--]){
                flag=false;
            }
        }
        (flag)?cout<<"Yes!"<<endl:cout<<"No!"<<endl;
    }
    return 0;
}

编辑于 2020-03-12 12:59:00 回复(0)
#include<stdio.h>
(737)#include<string.h>
char str[1010];
void isPalindrome(char str[],int n){
	int flag = 1;
    for(int i=0;i<n/2;i++){
        if(str[i] != str[n-1-i]){
            flag = 0;
            break;
        }
    }
    if(flag)
    	printf("Yes!\n");
    else
    	printf("No!\n");
}

int main(){
    while(scanf("%s",str)!=EOF){
        isPalindrome(str,strlen(str));
    }
    return 0;
}

发表于 2020-03-09 20:17:53 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main(){
    char ch[1001];
    while(cin>>ch){
        bool judge=1;
        for(int i=0;i<strlen(ch)/2&&judge;i++)
            if(ch[i]!=ch[strlen(ch)-1-i])
                judge=0;
        if(judge) cout<<"Yes!"<<endl;
        else cout<<"No!"<<endl;
    }
}

发表于 2020-01-16 16:19:54 回复(0)
#include<bits/stdc++.h>
int main(){
    char a[1000]={};
    while(gets(a))
        for(int i=0;i<=strlen(a)/2;i++){
            if(a[i]!=a[strlen(a)-i-1]){
                printf("No!\n"); break;
            }
            if(i==strlen(a)/2)
                printf("Yes!\n");
        }
}
发表于 2019-03-09 16:37:38 回复(0)
#include<stdio.h>
#include<string.h>

int main(){
    char n[10000] = {0};
    while(~scanf("%s", &n)){
        int i, answear = 1;
        for(i = 0; i < strlen(n); i++)  if(n[i] != n[strlen(n)-1 - i]) answear = 0;
        answear == 0 ? printf("No!\n") : printf("Yes!\n");
        memset(n, 0, sizeof(n));
    }
    
    return 0;
}
发表于 2018-11-03 15:39:33 回复(0)
#include<stdio.h>
#include<string.h>

int main()
{
    char str[1008];
    char * start, * end;
    
    while(gets(str) != NULL){
        start = str;
        end = str + strlen(str) - 1;
        while(end - start >= 0 && *start == *end){
            start++;
            end--;
        }
        if(end - start < 0)
            printf("Yes!\n");
        else
            printf("No!\n");
    }
    return 0;
}

发表于 2018-07-25 22:53:36 回复(0)
#include<stdio.h>
#include<string.h>

int main(){
    char a[1001];
    int len;
    int i,N;
    scanf("%s",&a);
    len=strlen(a);
    N=len;
    if(len%2==0){
        for(i=0;i<len/2;i++){
            if(a[i]!=a[N-1-i]){
                printf("No!");
                return 0;
            }
        }
    }else{
        for(i=0;i<(len-1)/2;i++){
            if(a[i]!=a[N-1-i]){
                printf("No!");
                return 0;
            }
        }
    }
    printf("Yes!");
    return 0;
}
发表于 2018-06-03 17:05:43 回复(0)
#include <cstring>
#include <cstdio>

using namespace std;

int main()
{
    //freopen("date.txt", "r", stdin);
    char str[1001];
    int i, j;
    while(scanf("%s", str) != EOF){
        for(i = 0, j = strlen(str) - 1; i <= j; i++, j--)
            if(str[i] != str[j]){
                printf("No!\n");
                break;
            }
        if(i > j)
            printf("Yes!\n");
    }
    return 0;
}

发表于 2018-02-13 11:03:26 回复(0)
#include <iostream>
#include <string>
using namespace std;
int main(){
    string str;     
    while(cin>>str){
        bool flag=true;
        int i,j;        
        for(j=str.size()-1,i=0;j>=0;j--,i++){
            if(str[j]!=str[i]){
                flag=false;
                break;
            }                      
        }
        if(flag) cout<<"Yes!"<<endl;
        else cout<<"No!"<<endl;    
    }
    return 0;
}

发表于 2017-11-29 19:05:27 回复(3)
try:

    while True:

        line = raw_input()    # 读取输入

        length = len(line)

        i, j = 0, length-1

        while i < j:

            if line[i] != line[j]:

                print 'No!'

                break

            i += 1

            j -= 1

        if i >= j:

            print 'Yes!'

except:

    pass

也可以把字符串直接反转。

编辑于 2017-09-06 14:55:55 回复(0)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Test

{

class Program

{

    static void Main(string[] args)

    {

        string str1;

        if (!string.IsNullOrWhiteSpace(str1 = Console.ReadLine()))

        {

            for (int i = 0; i < str1.Length; i++)

            {

                if (str1[i] != str1[str1.Length - i - 1])

                {

                    Console.WriteLine("No!");

                    return;

                }

            }

            Console.WriteLine("Yes!");

        }

    }

}

}

发表于 2017-07-06 16:19:09 回复(0)