1. 程式人生 > >判斷一個字串是不是迴文串

判斷一個字串是不是迴文串

所謂迴文字串,就是一個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。

題目:判斷一個字串是否為迴文

解法:遞迴

遞迴的作用在於把問題的規模不斷縮少,直到問題縮少到能簡單地解決

問:如何縮少問題規模?

答:通過觀察可以知道,一個迴文字串其中內部也是迴文。所以,我們只需要以去掉兩端的字元的形式一層層檢查,每一次的檢查都去掉了兩個字元,這樣就達到了縮少問題規模的目的。

新問題與原問題有著相同的形式

當去掉兩端字元後的字串,其產生的新問題同樣是檢查這個字串是否迴文。

遞迴的結束需要簡單情景

1. 字串長度可能會奇數或偶數:

  • 如果字串長度是奇數,字串會剩下最中間那位字元,但其不影響迴文。當檢查到長度為1的時候即代表此字串是迴文
  • 如果字串長度是偶數,當兩端的字串兩兩比較檢查後不會剩下字元。即檢查到長度為0的時候即代表此字串是迴文

2. 如果檢查到兩端兩個字元不相同。則說明此字串不是迴文,直接返回0,不需要繼續檢查

//1代表是迴文,0代表不是迴文
#include <iostream>
#include<string.h>
#include<stdio.h>
using namespace std;

int n;
char a[110];

int fun(int l, int r, char *str, int len)
{
    if (len==0||len==1)
        return 1;
    if (str[l]!=str[r])
        return  0;
    return fun(l+1,r-1,str,len-2);
}
int main()
{
    scanf("%d%*c",&n);
    while(n--)
    {
        scanf("%s",a);
        int len=strlen(a);
        cout << fun(0,len-1,a,len) << endl;
    }
    return 0;
}



相關推薦

判斷一個字串是否

function isPalindrome(s){ var arr=s.split(''); arr.reverse(); var newStr=arr.join(''); ret

判斷一個字串能否通過新增一個字元變成

蘑菇街筆試題目: 判斷一個字串能否通過新增一個字元變成迴文串 相關概念: “迴文串”是一個正讀和反讀都一樣的字串,比如“level”或者“noon”等等就是迴文串。 迴文可分為兩種:偶數迴文和奇數迴文,偶數迴文中間兩個字元相同,奇數迴文中間只有一個字元; 題目可以分為

演算法筆記 — 【字串

  題目連結:http://www.codeup.cn/problem.php?cid=100000580&pid=8 題目描述 讀入一串字元,判斷是否是迴文串。“迴文串”是一個正讀和反讀都一樣的字串,比如“level”或者“noon”等等就是迴文串。 輸入

判斷給定字串是否(棧和佇列)

若一個字串的正序與倒序相同,則稱其為迴文字串。 程式碼如下: #define m 100  typedef struct zhan         //定義棧  {    char data[m]; 

演算法:動態規劃——區間模型之最少新增幾個字元使得字串變成

題目:給定一個長度為n(n <= 1000)的字串A,求插入最少多少個字元使得它變成一個迴文串。 思路: 典型的動態規劃區間模型,區間模型的狀態表示一般為d[i][j],表示區間[i, j]上的最優解,然後通過狀態轉移計算出[i+1, j]或者[i, j+1]上的

Python判斷一個字串是否包含子的幾種方法

1.使用成員操作符 in >>> s='nihao,shijie' >>> t='nihao' >>> result = t in s >

判斷一個字串裡面的子出現的次數

package day12; public class TextString5 { public static void main(String[] args) { Coun

c# 判斷輸入字串是否

迴文: 例如 : txt bccb等 using System; using System.Collections.Generic; using System.Linq; using System.T

判斷一個字串

所謂迴文字串,就是一個字串,從左到右讀和從右到左讀是完全一樣的,比如"aba"。 題目:判斷一個字串是否為迴文 解法:遞迴 遞迴的作用在於把問題的規模不斷縮少,直到問題縮少到能簡單地解決 問:如何縮少問題規模? 答:通過觀察可以知道,一個迴文字串其中內部

判斷一個字串字串

編寫了一個程式,功能是判斷一個輸入的字串是否是迴文字串,程式碼如下 int is_plal(char str[100]) { char *str1 = str; char *str_s = str1; char *str_m = st

LeetCode:5. Longest Palindromic Substring(找出一個字串中最大的子

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of sis 1000. Example 1: Input

一個字串中找出最長

如何高效的在一個字串中找到最長的迴文串呢?下面我們根據程式碼來分析 首先,迴文串有兩種,一種是字串的長度是偶數,另一種就是奇數。 我們從字串第二個字元開始,同樣我們把當前起始字元叫做k 先檢驗奇數長度的字串,對比該字元的前一個和後一個(k -

給定一個字串,找出其中最長的

迴文 ,是指數或者字串具有首尾迴環性質,從後向前按位顛倒後與原文一樣。首尾迴環的數字就是迴文數,如:121,12321;首尾迴環的字串就是迴文串,如:’madam’。 程式碼 import java.util.LinkedList; import java.util.List;

判斷一個字串是另一個的子(匹配)

題目描述 判斷短字串中的所有字元是否在長字串中全部出現 輸入: bc            abc 輸出:true 【程式碼】 #include<iostream>

用遞實現判斷一個字串是否是的方法

迴文:把相同的字串顛倒過來,產生首尾迴環,叫做迴文。 例如:1234321、1221、1。 注意:單個字元也是迴文。 下面給出兩個版本的判斷字串是否是迴文的方法。 方法一:遞迴實現判斷一個字串是

程式設計判斷字串是否為 判斷一個字串是否是,例如單詞‘level’

#include <stdio.h> #include <string.h> int main() {char a[100]= {0};int i = 0;int len = 0;printf("please input character stri

判斷一個字串是否是字串

/** 判斷迴文字串1 */ function is_plalindrome($str){ $len=strlen($str); $le=1; $k=intval($len/2)+1; for($i=0;$i<$k;$i++){ if (subs

判斷一個字串是否是

問題:如何判斷一個字串兒是否是迴文?   所謂的字串兒迴文,就是無論是正序讀還是反序讀,它都是一毛一樣的,比如說字串兒“rotator”,無論是從左往右讀,還是從右往左讀,它都是同

【C語言】判斷一個字串是否為字串

判斷一個字串是否為迴文字串。 #include <stdio.h> int main(void) { char a[100]; int i = 0, j = 0; printf("Plea

c語言程式判斷一個字串是否是

#include<stdio.h>#include<string.h>int main(){    char a[100];    int i,j;    gets(a);