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); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |