资讯专栏INFORMATION COLUMN

【算法】算法测试题1:循环单词

dingding199389 / 552人阅读

摘要:题目描述循环单词一个单词循环右移得到另一个单词。输出循环单词种数。注意如果单词没有和任何单词构成循环单词,那么也为一种循环单词,。

题目描述
循环单词:一个单词循环右移得到另一个单词。
例如:picture和turepic属于一种循环单词。
给出n个单词,统计有多少种循环单词。
输入
输入n+1行
第一行为单词个数n(n:[1,50])
接下来n行,每一行一个单词,小写构成。
输出
循环单词种数。
思路

从第一个单词开始,遍历每个单词。
每个没有被统计过的单词i都和后面所有没有统计过的单词j比较,是否构成循环单词。
如果构成循环单词且该循环单词没有被统计过,统计数cont+1并且标记j为统计过use[j]=true;
如果构成循环单词但是没被统计过,则标记j为统计过use[j]=true,不再统计;
如果不够循环单词,则不统计也不标记,不做任何操作。
注意:如果单词i没有和任何单词构成循环单词,那么也为一种循环单词,count+1。

tips:字符串循环右移使用substring方法

use[i]记录第i个单词是否被统计过
count用来统计循环单词个数
flag表示目前正在访问的这个循环单词是否被统计过,如果被统计过就不再统计

javascript解法
while(line=readline()){
    let n = parseInt(line);
    let strArr = new Array();
    let use = [];
    for(let i = 0; i < n; i++){
        strArr[i] = new Array(readline());
        use[i] = false;
    }
    let count = 0;
    let flag = false;
    for(let i = 0; i < n; i++){
        if(!use[i]){    //单词i没有被统计过
            use[i] = true;    //标记单词i被统计过
            flag = false;     //目前该种循环单词没有被统计过
            for(let j = i+1; j < n; j++){    //和i单词后面的每个没有被统计过的 单词比较
                if(!use[j]){//只和没有被统计过的单词j比较
                    if(same(strArr[i],strArr[j])){//比较i和j是否为循环单词
                        if(!flag){//如果这种循环单词没有统计,则统计+1
                            count++;
                            flag = true;
                        }
                        use[j] = true;
                    }
                }
            }
            if(!flag){//单词i这种循环单词没有被统计过,不和任何单词构成循环单词
                count++;
            }
        }
    } 
    print(count);
}
//判断两个单词是否为循环单词
function same(stra, strb){
    //转成字符串类型,否则为对象object类型,length=1
    let str1 = new String(stra);
    let str2 = new String(strb);
    if(str1.length != str2.length){//长度不一样必然不能构成循环单词
        return false;
    }
    for(let i = 0; i < str1.length; i++){
        //循环右移,每次右移一位,比较两个单词是否相等
        //字符串循环右移使用substring方法
        let str = str1.substring(i)+ str1.substring(0,i);
        if(str == str2){
            return true;
        }
    }
    return false;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97168.html

相关文章

  • JavaScript中的算法(附10道面试常见算法题解决方法和思路)

    摘要:中的算法附道面试常见算法题解决方法和思路关注每日一道面试题详解面试过程通常从最初的电话面试开始,然后是现场面试,检查编程技能和文化契合度。值得记住的数组方法有和。一个好的解决方案是使用内置的方法。 JavaScript中的算法(附10道面试常见算法题解决方法和思路) 关注github每日一道面试题详解 Introduction 面试过程通常从最初的电话面试开始,然后是现场面试,检查编程...

    Cruise_Chan 评论0 收藏0
  • 基于概率论的分类方法:朴素贝叶斯

    摘要:基于概率论的分类方法朴素贝叶斯概述贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。另外一种有效计算条件概率的方法称为贝叶斯准则。可以在任意的分类场景中使用朴素贝叶斯分类器,不一定非要是文本。 基于概率论的分类方法:朴素贝叶斯 1. 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本章首先介绍贝叶斯分类算法的基础—...

    LeviDing 评论0 收藏0
  • 每日一道算法题 - LongestWord(easy-1)

    摘要:规则使用语言,让函数获取传递的参数并返回字符串中的最大单词。忽略字符串中标点符号并假设不会为空。测试用例思路通过过滤字符串,并把字符串根据空格符转换成字符串数组通过循环把获取字符串数组中的长度最长的字符串 虽然都是很简单的算法,每个都只需5分钟左右,但写起来总会遇到不同的小问题,希望大家能跟我一起每天进步一点点。更多的小算法练习,可以查看我的文章。 规则 Using the JavaS...

    plokmju88 评论0 收藏0
  • JavaScript 数据结构与算法 这题你会吗?

    摘要:第题反转字符串中的单词给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例输入输出注意在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。 LeetCode 第557题 557. 反转字符串中的单词 III 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 输入: Lets tak...

    Olivia 评论0 收藏0
  • W3Cschool——初级脚本算法

    摘要:方法二提供者沐辰楼姬采用对象的方法取值优化内部循环性能确认末尾字符算法挑战检查一个字符串是否以指定的字符串结尾。方法一方法二提供者沐辰楼姬使用数组对象方法,把数组的第一个元素从其中删除,并返回第一个元素的值。 showImg(https://segmentfault.com/img/remote/1460000009702368?w=1269&h=541); 前言 偶然看到W3Csch...

    mayaohua 评论0 收藏0

发表评论

0条评论

dingding199389

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<