超级郁闷,4个方法都“Memory limit exceeded”
题目是这样的:
输入一个字符串,如果这个字符串是由in,input,out,output,puton,one组成,就返回YES,否则返回NO。
时间限制是1秒,内存限制16M。每个字符串长度不超过10^7个字符。
方法一:
using System;using System.Text.RegularExpressions;class Program{static void Main(string[] args){int lenNum = int.Parse(Console.ReadLine());for (int i = 0; i < lenNum; i++){if (Regex.IsMatch(Console.ReadLine(), "^(?:one|out(?:put)?|in(?:put)?|puton)+$")) Console.WriteLine("YES");else Console.WriteLine("NO");}}}
using System;class Program{static void Main(string[] args){int lenNum = int.Parse(Console.ReadLine());for (int i = 0; i < lenNum; i++){if (Console.ReadLine().Replace("one","").Replace("puton","").Replace("output","").Replace("input","").Replace("out","").Replace("in","")=="") Console.WriteLine("YES");else Console.WriteLine("NO");}}}
using System;class Program{static void Main(string[] args){int lenNum = int.Parse(Console.ReadLine());for (int i = 0; i < lenNum; i++)Console.WriteLine(Judge(Console.ReadLine()));}static string Judge(string input){int pos = 0;for (int i = input.Length - 1; i >= 0; i--){pos++;if (pos == 1||pos==4) continue;else if (pos == 2){if (input.Substring(i, pos) == "in") pos = 0;else continue;}else if (pos == 3){if (input.Substring(i, pos) == "one" || input.Substring(i, pos) == "out") pos = 0;else continue;}else if (pos == 5){if (input.Substring(i, pos) == "input" || input.Substring(i, pos) == "puton") pos = 0;else continue;}else{if (input.Substring(i, pos) == "output") pos = 0;else return "NO";}}if (pos==0) return "YES";else return "NO";}}
using System; class Program { static void Main(string[] args) { int lenNum = int.Parse(Console.ReadLine()); for (int i = 0; i < lenNum; i++) Console.WriteLine(JudgeInput(Console.ReadLine()));} static string JudgeInput(string input) { int pos = 0; for (int i = input.Length - 1; i >= 0; i--) { pos++; switch (input[i]) { case 'p': if (pos == 5) { if (input.Substring(i, 5) == "puton") pos = 0; else pos = -1; } break; case 'i': if (pos==2||pos==5) { if(input.Substring(i, pos) == "in"||input.Substring(i, pos) == "input") pos = 0; else pos = -1; } else pos=-1;break; case 'o': if (pos == 3) { if (input.Substring(i, pos) == "one" || input.Substring(i, pos) == "out") pos = 0; else pos = -1; } else if (pos == 6) { if (input.Substring(i, 6) == "output") pos = 0; else pos = -1; } break; case 'n': case 'e': case 't': case 'u': break; default: pos = -1; break; } if (pos < 0 || pos > 7) return "NO"; } if (pos==0) return "YES"; else return "NO"; }}
using System;using System.Text;class Program{ static void Main(string[] args) { StringBuilder sb = new StringBuilder(); int lenNum = int.Parse(Console.ReadLine()); for (int i = 0; i < lenNum; i++) { sb.Append(Console.ReadLine()).Replace("one", "").Replace("puton", "").Replace("output", "").Replace("input", "").Replace("out", "").Replace("in", ""); if (sb.Length==0) { Console.WriteLine("YES"); } else { Console.WriteLine("NO"); sb.Length = 0; } } }}
[解决办法]
你先把输入的数据转换为charArray,然后再分析,可能就不会有问题
[解决办法]
我觉得可以利用有限自动机的状态转换来解决,读取字符串的时候一个字符一个字符来读,然后进行状态的转换.
[解决办法]
我觉得lz的意思理解错了,粗略的看了一下
one 和puton是两个对象,他们可以说话
one可以说puton,out,output这三个词
puton可以说in,input,one这三个词
我的理解是,
字符串必须用one或者puton开头
out和output之前必须有one
in,input之前必须有puton
[解决办法]
如果是内存超出了,可以试试别用字符串,直接从Console.Read()一个一个读取。
不知道是否会省一些内存!