我在一个名为mettl的平台上做了一个关于雇佣一家公司的测试。
问题陈述:
你给你的朋友写封情书。然而,在你的朋友读到它之前,其他人会读它,并将每个单词的字符旋转到正确的K次。找到即使在字母转移之后仍然保持不变的单词的数量。
注:单词之间可以有多个空格。
输入规范:
Input1:字串
Input2: k次旋转发生
输出规范:
您的函数应该返回正确的单词数。
示例1:
Input1: llohe ereth
输入2: 2
输出:0
Explanation:在示例1中,"llohe“是一个具有K因子2的旋转字符串。因此,在将最后两个右向左的字母移动后,我们得到原来的字符串为"Hello那里”。
示例2:
Input1: adaada
输入2: 3
输出:1
Explanation:在示例2中,"adaada“在旋转3次时返回"adaada”。因此答案是1。
我编写了下面的解决方案,它通过了上面的两个基本案例,但是隐藏测试用例(也包括时间复杂性测试用例)失败了。只有一个角测试用例通过了,因为我正在检查字符串input1,使其不为空。解决办法如下:
public int rotatedWords(String input1, int input2) {
int count = 0;
String arr[] = input1.split(" ");
if (input1 != null && !input1.isEmpty()) {
for (int i = 0; i < arr.length; i++) {
String s1 = arr[i] + arr[i];
int start = arr[i].length() - input2;
System.out.println("arr[i] : " + arr[i]);
String s2 = s1.substring(start, start + arr[i].length());
System.out.println("s2 : " + s2);
if (s2.equalsIgnoreCase(arr[i])) {
count++;
}
}
}
return count;
}问的是,我无法理解为什么隐藏的测试失败。请帮帮我。
发布于 2021-02-17 08:25:37
这是Python 3中的解决方案
def rotatedWords(cls, input1,input2):
rotateString = input1.split(' ')
count = 0
for i in range(1,input2+1):
for j in range(len(rotateString)):
rotateString[j]= rotateString[j][1:]+rotateString[j][0]
actualWrod = input1.split(' ')
for i in range(len(rotateString)):
for j in range(len(actualWrod)):
if rotateString[i]==actualWrod[j]:
count+=1
return count
print(rotatedWords(1,"adaada",3))
print(rotatedWords(1,"llohe ereth",2))发布于 2021-02-18 06:17:14
#include<bits/stdc++.h>
using namespace std;
// In-place rotates s towards left by d
void leftrotate(string &s, int d)
{
reverse(s.begin(), s.begin()+d);
reverse(s.begin()+d, s.end());
reverse(s.begin(), s.end());
}
// In-place rotates s towards right by d
int rightrotate(string &s, int d)
{
string s1="";
int i=0,flag=0;
vector<string>str;
while(s[i]!='\0'){
if(s[i] != ' '){
s1 = s1+s[i];
i++;
}
else{
if(s1 != ""){ //checking for extra space
str.push_back(s1);
s1 = "";
i++;
}
else
i++;
}
}
str.push_back(s1);
vector<string>str2;
for(int i=0;i<str.size();i++){
str2.push_back(str[i]);
}
for(int i=0;i<str.size();i++){
leftrotate(str[i], str[i].length()-d);
}
for(int i=0;i<str.size();i++){
if(str[i] == str2[i]){
flag++;
}
}
return flag;
}
int main()
{
string str1;
getline(cin, str1);
int k;
cin>>k;
cout<<rightrotate(str1, k);
return 0;
}发布于 2021-02-19 20:09:49
def check(_str):
length = len(_str)
for i in range(length):
if (_str[i]!=_str[(input2+i)%length]):
return 0
return 1
words = input1.split()
ans = list(map(check,words))
print(sum(ans))https://stackoverflow.com/questions/65783973
复制相似问题