字符串处理经典题

Posted amaris-diana

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串处理经典题相关的知识,希望对你有一定的参考价值。

字符串处理经典题

 

1.CF219C Color Stripe(要求修改后的串中相邻字符不相同,求最少修改次数)

Q: 给你一个长度为N 的字符串(由大写字母组成)和一个数量K,K是指可使用的不同的大写字母的个数。现要求修改源字符串,使得串中相邻的两个位置上的元素不同;一次只能更改一个字符,问你最少的修改次数是多少?并输出任意一个满足条件的答案字符串。

A:从字符串第二位开始逐个检查即可,每次维护num[i ]= SG(num[ i- 1 ],num[ i+ 1]);即可 。注意K= 2时可以特判,因为答案串只有"ABABABA...ABA"和"BABAB...BABAB"两种。

原题链接: http://codeforces.com/problemset/problem/219/C

技术图片
 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<map>
 7 using namespace std;
 8  
 9 char _sg(char a, char b)
10 
11     int x= a- A;
12     int y= b- A;
13  
14     int ans;
15     for (int i= 0; i< 4; i ++)
16     
17         if (i!= x&& i!= y)
18         
19             ans= i;
20             break;
21         
22     
23     return (A+ ans);
24 
25 char ss[1000010];
26 int main()
27 
28     int n, k;
29     scanf("%d %d", &n, &k);
30     getchar();
31     scanf("%s", ss+ 1);
32     ss[0]= #;
33     int len= strlen(ss);
34     ss[len]= #;
35     len += 1;
36     int cnt= 0;
37     if (k>= 3)
38     
39         for (int i= 2; i< len- 1; i ++)
40         
41             if (ss[i]== ss[i- 1])
42             
43                 ss[i]= _sg(ss[i- 1], ss[i+ 1]);
44                 cnt ++;
45             
46         
47     
48     else
49     
50         int cnt1= 0;
51         int cnt2= 0;
52         for (int i= 1; i< len- 1; i ++)
53         
54             if (i% 2!= ss[i]- A) cnt1 ++;
55             else cnt2 ++;
56         
57         if (cnt1<= cnt2)
58         
59             cnt= cnt1;
60             for (int i= 1; i< len- 1; i ++)
61             
62                 int cn= i% 2;
63                 ss[i]= A+ cn;
64             
65         
66         else
67         
68             cnt= cnt2;
69             for (int i= 1; i< len- 1; i ++)
70             
71                 int cn= (i+1)% 2;
72                 ss[i]= A+ cn;
73             
74         
75     
76     printf("%d\n", cnt);
77     for (int i= 1; i< len- 1; i ++)
78     
79         printf("%c", ss[i]);
80     
81     printf("\n");
82     return 0;
83 
View Code

 

以上是关于字符串处理经典题的主要内容,如果未能解决你的问题,请参考以下文章

预处理过程详解

字典经典习题

MySQL笔记SQL经典实例(下)

Java开发经典面试题分享,建议收藏

经典的海量数据处理面试题

自然语言处理:NLTK的自然语言经典应用