一、内容

题意:不能出现one 或者 two 这2个字符串。问最少需要删除那些字符,并输出删除的位置。

二、思路

  • 我们只需要删除one的n 或者是two的w就可以让一个字符串不出现这2个串。
  • 特殊情况:当 twone这种情况时,我们需要删除的是 o 这个字符。

三、代码

#include <cstdio>
#include <cstring>
#define min(a, b) (a > b ? b : a)
using namespace std;
const int N = 15e5 + 5; 
char s[N];
int t, cnt, len, path[N];
int main() {	
	scanf("%d", &t);
	while (t--) {
 		cnt = 0;
		scanf("%s", s + 1);
		len = strlen(s + 1);
		for (int i = 1; i <= len - 2; i++) {
			if (s[i] == 'o' && s[i + 1] == 'n' && s[i + 2] == 'e') path[++cnt] = i + 1, i += 2;
			if (s[i] == 't' && s[i + 1] == 'w' && s[i + 2] == 'o') {
				if (s[i + 3] == 'n' && s[i + 4] == 'e') path[++cnt] = i + 2, i += 4;
				else path[++cnt] = i + 1, i += 2; 
			} 
		}	
		printf("%d\n", cnt);
		for (int i = 1; i <= cnt; i++) {
			printf("%d ", path[i]);
		}
		puts("");
	}
	return 0;
}