zoukankan      html  css  js  c++  java
  • HDU 3746 将字符串的全部字符最少循环2次需要添加的字符数

    Sample Input
    3
    aaa
    abca
    abcde

    Sample Output
    0
    2
    5

    题目大意:
    给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数。
    例子:
    abcabc 已经循环2次,添加数为0
    abcac 没有循环2次,添加字符abcac。数目为5.
    abcabcab 已经循环过2次,但第三次不完整,需要添加数为1

     1 # include <cstdio>
     2 # include <cstring>
     3 using namespace std;
     4 
     5 char s1[100010] ;
     6 int next[100010] ;
     7 int tlen ;
     8 int xlen ;
     9 
    10 void getNext()
    11 {
    12     int j, k;
    13     j = 0; k = -1; next[0] = -1;
    14     while(j < tlen)
    15         if(k == -1 || s1[j] == s1[k])
    16             next[++j] = ++k;
    17         else
    18             k = next[k];
    19 
    20 }
    21 
    22 int main ()
    23 {
    24     int T ;
    25     int add ;
    26     scanf("%d" , &T); 
    27     while (T--)
    28     {
    29         scanf("%s" , s1) ;
    30         tlen = strlen(s1) ;
    31         getNext() ;
    32         xlen =tlen - next[tlen] ; //循环节的长度
    33         if (xlen != tlen && tlen % xlen == 0)
    34           printf("0
    ") ;
    35         else
    36         {
    37             add = xlen - next[tlen] % xlen ;
    38             printf("%d
    " , add) ;
    39         }
    40     }
    41     
    42     
    43     return 0 ;
    44 }
    View Code
  • 相关阅读:
    递归——8月4日
    练习:结构体、枚举类型——8月3日
    结构体、枚举类型——8月3日
    数组——7月25日
    类的复习——7月25日
    异常保护——7月25日
    类以及练习——7月25日
    javase学习小结二
    javase学习小结一
    产生随机数的方法
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/4497901.html
Copyright © 2011-2022 走看看