加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang 递归判断回文字符串

发布时间:2020-12-16 18:42:44 所属栏目:大数据 来源:网络整理
导读:判断回文字符串是个比较经典的问题。 思路就是拿第一个字符和最一个字符比较,如果不相同就退出,相同的话继续刚刚的过程,直到第一个字符和最后一个字符相遇或者他们的距离为1时。说明他们是回文字符串。 下面的代码会忽略空白字符 如"1 1 2 1"会认为是回文

判断回文字符串是个比较经典的问题。

思路就是拿第一个字符和最一个字符比较,如果不相同就退出,相同的话继续刚刚的过程,直到第一个字符和最后一个字符相遇或者他们的距离为1时。说明他们是回文字符串。

下面的代码会忽略空白字符 如"1 1 2 1"会认为是回文字符串。

golang

packagemain

import(
"fmt"
"os"
"strings"
"unicode/utf8"
)

funcdoPalindrome(sstring)bool{
ifutf8.RuneCountInString(s)<=1{
returntrue
}

word:=strings.Trim(s,"trnv")
first,sizeOfFirst:=utf8.DecodeRuneInString(word)
last,sizeOfLast:=utf8.DecodeLastRuneInString(word)

iffirst!=last{
returnfalse
}
returndoPalindrome(word[sizeOfFirst:len(word)-sizeOfLast])
}

funcIsPalindrome(wordstring)bool{
s:=""
s=strings.Trim(word,"trnv")
iflen(s)==0||len(s)==1{
returnfalse
}
returndoPalindrome(s)
}

funcmain(){
args:=os.Args[1:]
for_,v:=rangeargs{
ok:=IsPalindrome(v)
ifok{
fmt.Printf("%sn",v)
}
}

}


clang递归版:

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdint.h>

intdo_palind(char*first,char*last){
/*跳过头部的空白字符*/
while(*first&&isspace(*first)){
first++;
}
/*跳过尾部的空白字符*/
while(first<last&&isspace(*last)){
last--;
}

if(last-first<=0)
return1;

if(*first!=*last)
return0;

returndo_palind(++first,--last);
}

intispalindrome(constchar*str){
if(str[0]==''||str[1]=='')
return0;
//printf("---->%ldn",strlen(str));
returndo_palind((char*)str,(char*)str+strlen(str)-1);
}

intmain(intargc,char**argv){
intis;
while(*++argv){
is=ispalindrome(*argv);
if(is)
printf("%sn",*argv);
}
}


clang 循环版:

#include<stdio.h>
#include<string.h>
#include<ctype.h>

intispalindrome(constchar*str){
char*last;

if(str[0]==''||str[1]=='')
return0;

last=(char*)str+strlen(str)-1;

while(str<last){
while(str<last&&isspace(*str)){
str++;
}

while(str<last&&isspace(*last)){
last--;
}

if(*str!=*last)
return0;
str++;
last--;
}
return1;
}

intmain(intargc,char**argv){
intis;
while(*++argv){
is=ispalindrome(*argv);
if(is){
printf("%sn",*argv);
}
}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读