题目如下:
Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the original place.
The move sequence is represented by a string. And each move is represent by a character. The valid robot moves are R
(Right), L
(Left), U
(Up) and D
(down). The output should be true or false representing whether the robot makes a circle.
Example 1:
Input: "UD" Output: true
Example 2:
Input: "LL" Output: false
一开始写了一个超时的……非常郁闷。代码如下:
#include<iostream>
#include<string.h>
using namespace std;
bool judgeCircle(char* moves) {
int R=0, L=0, U=0, D=0;
for(int i=0; i<strlen(moves); i++)
{
switch(moves[i])
{
case 'R':
R++;
break;
case 'L':
L++;
break;
case 'U':
U++;
break;
case 'D':
D++;
break;
default:
break;
}
}
return (R == L) && (U == D);
}
int main()
{
char moves[1000];
cout << "请输入字符串(R L U D):";
cin >> moves;
cout << judgeCircle(moves);
return 0;
}
不知道是因为什么而超时……QAQ 不是说switch是用空间换时间嘛
改成如下:
bool judgeCircle(char* moves) {
int R=0, U=0;
for(int i=0; i<strlen(moves); i++)
{
switch(moves[i])
{
case 'R':
R++;
break;
case 'L':
R--;
break;
case 'U':
U++;
break;
case 'D':
U--;
break;
default:
break;
}
}
return (R == 0) && (U == 0);
}
发现还是超时……委屈得快要哭出来了
应该是因为判断耗时太长了= =
于是我借鉴了一下discuss里的思路并且自己写了一下,啊终于AC了真是让人热泪盈眶啊!!!
#include<iostream>
#include<string>
using namespace std;
bool judgeCircle(string moves) {
int R=0, U=0;
for(char c : moves)
{
R = R + (c == 'R') - (c == 'L');
U = U + (c == 'U') - (c == 'D');
}
return (R == 0) && (U == 0);
}
int main()
{
string moves;
cout << "请输入字符串(R L U D):";
cin >> moves;
cout << judgeCircle(moves);
return 0;
}