golang 递归判断回文字符串

前端之家收集整理的这篇文章主要介绍了golang 递归判断回文字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

golang

  1. packagemain
  2.  
  3. import(
  4. "fmt"
  5. "os"
  6. "strings"
  7. "unicode/utf8"
  8. )
  9.  
  10. funcdoPalindrome(sstring)bool{
  11. ifutf8.RuneCountInString(s)<=1{
  12. returntrue
  13. }
  14.  
  15. word:=strings.Trim(s,"\t\r\n\v")
  16. first,sizeOfFirst:=utf8.DecodeRuneInString(word)
  17. last,sizeOfLast:=utf8.DecodeLastRuneInString(word)
  18.  
  19. iffirst!=last{
  20. returnfalse
  21. }
  22. returndoPalindrome(word[sizeOfFirst:len(word)-sizeOfLast])
  23. }
  24.  
  25. funcIsPalindrome(wordstring)bool{
  26. s:=""
  27. s=strings.Trim(word,"\t\r\n\v")
  28. iflen(s)==0||len(s)==1{
  29. returnfalse
  30. }
  31. returndoPalindrome(s)
  32. }
  33.  
  34. funcmain(){
  35. args:=os.Args[1:]
  36. for_,v:=rangeargs{
  37. ok:=IsPalindrome(v)
  38. ifok{
  39. fmt.Printf("%s\n",v)
  40. }
  41. }
  42.  
  43. }


clang递归版:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<ctype.h>
  4. #include<stdint.h>
  5.  
  6. intdo_palind(char*first,char*last){
  7. /*跳过头部的空白字符*/
  8. while(*first&&isspace(*first)){
  9. first++;
  10. }
  11. /*跳过尾部的空白字符*/
  12. while(first<last&&isspace(*last)){
  13. last--;
  14. }
  15.  
  16. if(last-first<=0)
  17. return1;
  18.  
  19. if(*first!=*last)
  20. return0;
  21.  
  22. returndo_palind(++first,--last);
  23. }
  24.  
  25. intispalindrome(constchar*str){
  26. if(str[0]=='\0'||str[1]=='\0')
  27. return0;
  28. //printf("---->%ld\n",strlen(str));
  29. returndo_palind((char*)str,(char*)str+strlen(str)-1);
  30. }
  31.  
  32. intmain(intargc,char**argv){
  33. intis;
  34. while(*++argv){
  35. is=ispalindrome(*argv);
  36. if(is)
  37. printf("%s\n",*argv);
  38. }
  39. }


clang 循环版:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<ctype.h>
  4.  
  5. intispalindrome(constchar*str){
  6. char*last;
  7.  
  8. if(str[0]=='\0'||str[1]=='\0')
  9. return0;
  10.  
  11. last=(char*)str+strlen(str)-1;
  12.  
  13. while(str<last){
  14. while(str<last&&isspace(*str)){
  15. str++;
  16. }
  17.  
  18. while(str<last&&isspace(*last)){
  19. last--;
  20. }
  21.  
  22. if(*str!=*last)
  23. return0;
  24. str++;
  25. last--;
  26. }
  27. return1;
  28. }
  29.  
  30. intmain(intargc,char**argv){
  31. intis;
  32. while(*++argv){
  33. is=ispalindrome(*argv);
  34. if(is){
  35. printf("%s\n",*argv);
  36. }
  37. }
  38. }

猜你在找的Go相关文章