网易笔试题:小易喜欢的单词
2016-08-16 14:42
253 查看
小易喜欢的单词具有以下特性:
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。
输入描述:
输入为一个字符串,都由大写字母组成,长度小于100
输出描述:
如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
C++代码:
#include <iostream>
using namespace std;
int findLCS(string A, int n, string B, int m) {// 最长公共子序列
string strA = "#" + A;
string strB = "#" + B;
int C[n+1][m+1];
for(int i=0; i <= n; i++)
C[i][0] = 0;
for(int i=0; i <= m; i++)
C[0][i] = 0;
for(int i=1; i <= n; i++) {
for(int j=1; j <= m; j++) {
if(strA[i] == strB[j])
C[i][j] = C[i-1][j-1] + 1;
else if(C[i-1][j] > C[i][j-1])
C[i][j] = C[i-1][j];
else
C[i][j] = C[i][j-1];
}
}
return C
[m];
}
bool isLikeWord(const string& str) {
for(string::size_type i=0; i < str.size()-1; i++) {
for(string::size_type j=i+1; j < str.size(); j++) {
string s = "";
s = s + str[i] + str[j] + str[i] + str[j];
if(4 == findLCS(str, str.size(), s, s.size()))
return false;
}
}
return true;
}
int main() {
string str;
while(cin >> str) {
bool isLike = true;
int flag[256] = {0};
for(string::size_type i=0; i < str.size(); i++) {
if((str[i] < 'A' || str[i] > 'Z') || ++flag[str[i]] >= 4 || (i+1 < str.size() && str[i] == str[i+1])) {// 必须是大写字母、不存在4个及以上的字母、不存在连续的字母
isLike = false;
break;
}
}
if(isLike) {
isLike = isLikeWord(str);// 取每两个字符组成 xyxy 和 字符串求最大公共子序列,若最后求得的长度正好为 4 说明,包含在里面
}
if(isLike)
cout << "Likes" << endl;
else
cout << "Dislikes" << endl;
}
return 0;
}
1.单词每个字母都是大写字母
2.单词没有连续相等的字母
3.单词没有形如“xyxy”(这里的x,y指的都是字母,并且可以相同)这样的子序列,子序列可能不连续。
例如:
小易不喜欢"ABBA",因为这里有两个连续的'B'
小易不喜欢"THETXH",因为这里包含子序列"THTH"
小易不喜欢"ABACADA",因为这里包含子序列"AAAA"
小易喜欢"A","ABA"和"ABCBA"这些单词
给你一个单词,你要回答小易是否会喜欢这个单词。
输入描述:
输入为一个字符串,都由大写字母组成,长度小于100
输出描述:
如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
C++代码:
#include <iostream>
using namespace std;
int findLCS(string A, int n, string B, int m) {// 最长公共子序列
string strA = "#" + A;
string strB = "#" + B;
int C[n+1][m+1];
for(int i=0; i <= n; i++)
C[i][0] = 0;
for(int i=0; i <= m; i++)
C[0][i] = 0;
for(int i=1; i <= n; i++) {
for(int j=1; j <= m; j++) {
if(strA[i] == strB[j])
C[i][j] = C[i-1][j-1] + 1;
else if(C[i-1][j] > C[i][j-1])
C[i][j] = C[i-1][j];
else
C[i][j] = C[i][j-1];
}
}
return C
[m];
}
bool isLikeWord(const string& str) {
for(string::size_type i=0; i < str.size()-1; i++) {
for(string::size_type j=i+1; j < str.size(); j++) {
string s = "";
s = s + str[i] + str[j] + str[i] + str[j];
if(4 == findLCS(str, str.size(), s, s.size()))
return false;
}
}
return true;
}
int main() {
string str;
while(cin >> str) {
bool isLike = true;
int flag[256] = {0};
for(string::size_type i=0; i < str.size(); i++) {
if((str[i] < 'A' || str[i] > 'Z') || ++flag[str[i]] >= 4 || (i+1 < str.size() && str[i] == str[i+1])) {// 必须是大写字母、不存在4个及以上的字母、不存在连续的字母
isLike = false;
break;
}
}
if(isLike) {
isLike = isLikeWord(str);// 取每两个字符组成 xyxy 和 字符串求最大公共子序列,若最后求得的长度正好为 4 说明,包含在里面
}
if(isLike)
cout << "Likes" << endl;
else
cout << "Dislikes" << endl;
}
return 0;
}
相关文章推荐
- 网易笔试编程题:小易喜欢的单词(C++)
- 网易笔试编程-小易喜欢的单词
- 网易 小易喜欢的单词
- 网易2018校招笔试_小易喜欢的数列_C++
- 8.12网易内推笔试题:小易喜欢的数列 java实现
- 网易编程题——小易喜欢的单词
- 网易笔试:小易喜欢的数列
- 网易—小易喜欢的单词
- 网易笔试:独立的小易
- 算法题--小易喜欢的单词
- 网易2017暑期实习生招聘笔试编程题之小易背单词
- 网易2017内推笔试题--小易的自主生活
- 【网易2017内推笔试】小易记单词
- 网易2018校招内推编程题_小易喜欢的数列
- 解救小易----网易2017内推笔试编程题合集(二)
- 【网易笔试】小易最近在数学课上学习到了集合的概念
- 牛客网小易喜欢的单词
- 网易笔试编程-饥饿的小易
- 小易喜欢的单词
- 网易2018校招内推编程题 小易喜欢的数列