HDU 1433(Simply Syntax)

递归判断,注意每个只有小写字母的正确句子只有一个字母(即 "p"为正确句子,"pq"为错误句子),详细见注释。

#include <iostream>
#include <string>
using namespace std;

string s;

//判断字符串s的第left个字符至第right个字符是否为一个正确的句子
bool isCorrect(int left, int right)
{
	if (left == right) //只有一个字符
	{
		if (s[left] >= 'p' && s[left] <= 'z')
			return true;
		else
			return false;
	}
	else
	{
		if (s[left] == 'N') //第一个字符为'N'
		{
			if (isCorrect(left + 1, right))
				return true;
			else
				return false;
		}
		else if (s[left] == 'C' || s[left] == 'D' || s[left] == 'E' || s[left] == 'I')
		{
			bool flag = false; //第一个字符之后的字符串是否能分成两个正确的句子
			for (int i = left + 1; i < right; i++)
			{
				if (isCorrect(left + 1, i) && isCorrect(i + 1, right))
				{
					flag = true;
					break;
				}
			}
			if (flag)
				return true;
			else
				return false;
		}
		else //字符串长度不为1,且第一个字符不是规定的大写字母
			return false;
	}
}

int main()
{
	while (cin >> s)
	{
		int len = s.size();
		if (isCorrect(0, len - 1))
			cout << "YES" << endl;
		else
			cout << "NO" << endl;
	}
	return 0;
}

继续加油。

发布了326 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/105309088