荟萃馆

位置:首页 > IT认证 > 华为认证

2016年华为上机题目之最长回文

本文为同学们分享的'是华为上机题目之最长回文,希望对大家复习华为认证有所帮助!

2016年华为上机题目之最长回文

  一段字符串中提取最长的回文长度:

浅显易懂的想法就是假设任何一个位置的字符为回文中心,进行两个方向的扩散,进而提取最长回文。

这是最朴素的想法:

  代码如下:

1 #include

2 #include

3 using namespace std;

4

5 char str[100]="abbbbaaa";

6

7

8 //如果是回文长度是偶数个

9 int getMidtwoNum(char* s,int length,int index)

10 {

11 int re=1;

12 int t=index,b=index+1;

13 while(t>=0&&b

14 {

15 if(t==index)

16 re++;

17 else

18 re+=2;

19 b++;

20 t--;

21 }

22 return re;

23 }

24

25 //回文长度是奇数个

26 int getMidoneNum(char* s,int length,int index)

27 {

28 int re=1;

29 int t=index-1,b=index+1;

30 while(t>=0&&b

31 {

32 re+=2;

33 b++;

34 t--;

35 }

36 return re;

37 }

38

39 int getLhw(char* s)

40 {

41 int length=strlen(s);

42 int re=0;

43 int temp=0;

44 for(int i=0;i

45 {

46 temp=max(getMidoneNum(s,length,i),getMidtwoNum(s,length,i));

47 if(temp>re)

48 {

49 re=temp;

50 }

51 }

52 return re;

53 }

54 int main()

55 {

56 cout<

57 getchar();

58 }