首页 > 试题广场 >

循环单词

[编程题]循环单词
  • 热度指数:10311 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就是属于同一种循环单词。 现在给出n个单词,需要统计这个n个单词中有多少种循环单词。

输入描述:
输入包括n+1行:
第一行为单词个数n(1 ≤ n ≤ 50)
接下来的n行,每行一个单词word[i],长度length(1 ≤ length ≤ 50)。由小写字母构成


输出描述:
输出循环单词的种数
示例1

输入

5
picture
turepic
icturep
word
ordw

输出

2
示例2

输入

4
goran
igor
domagoj
relja

输出

4

说明

并不是必须包含两个或两个以上的不同单词才算一种循环单词!  

来个JavaScript版本

var rl = require("readline").createInterface(process.stdin, process.stdout);
var args = [];

rl.on('line', function(data){
    args.push(data);
    if(args.length >= parseInt(args[0] + 1)){
        rl.close();
    }
});

rl.on('close', function(){
    var arr = args.slice(1);
    var res = 0;
    for(var i = 0 ; i < arr.length; i ++){
        for(var j = i + 1; j < arr.length; j ++){
            if(judge(arr[i], arr[j])){
                // 如果两个是循环单词,就把arr[j]移除数组
                arr.splice(j, 1);
                j--;
            }
        }
    }
    res = arr.length;
    console.log(res);
});
// 判断是否互为循环单词
function judge(str1, str2){
    if(str1.split('').sort().join('') == str2.split('').sort().join('')){
        var temp1, temp2;
        for(var i = 0 ; i < str1.length; i ++){
            temp1 = str1.slice(0, i);
            temp2 = str1.slice(i);
            if(str2 == temp2 + temp1){
                return true;
            }
        }
    }
    return false;
}
发表于 2017-03-09 16:56:02 回复(1)
function obj(arr){
var strnumber=arr[0];
arr.shift();
var len=arr.length;//字符串的个数
var str1=arr[0];
var stringArr=[];
var len2=str1.length;//字符串的长度

for(var i=0;i<str1.length;i++){
var left=str1.substring(len2-i-1,len2);
var right=str1.substring(0,len2-i-1);
var newStr=left+right;
stringArr.push(newStr);
}
var count=0;
for(var i=0;i<len;i++){
for(var j=0;j<stringArr.length;j++){
if(arr[i]==stringArr[j]){
count++;
}
}
}
return count;

}
我的方法并没有错,但是我并不会处理输入流,谁教教我~不然通过不了啊
发表于 2017-03-08 23:17:39 回复(1)