【演算法】位元組跳動程式設計題-雙生詞

weixin_33807284發表於2018-09-04

題目描述

雙生詞

雙生詞是指滿足如下條件的兩個字串:(假設兩個字串分別為S和S’)

1. 字串長度相同
2. 將字串S收尾繞成環,再選一個位置切開,順時針或逆時針能夠得到字串S’

容易得到,若s與S’為雙生詞,則s’與s也為雙生詞

給定一批僅有英文小寫字母組成的字串,詢問他們之中是否存在雙生詞

輸入描述

首先給出測試組數t,表示一共有多少組資料

對於每組資料,第一行為一個整數n,表示一共有多少個字串。接下來n行,每行一個字串

思路

判斷str1和str2是否為雙生詞很簡單:
str = str1+str1 //解決收尾相連的問題
比較 str2是否為str中的子串,若是,則返回true
比較 str2.reverser()是否為str中的子串,若是,返回true //解決逆時針迴圈的問題
否則返回false

樣例

輸入

3
2
Helloworld
Hdlrowolle
2
Helloworld
Worldhello
2
Abcde
Acbde

輸出

Yeah
Yeah
Sad

JavaScript實現

const twins = (str1,str2) => {
    print("str1:",str1,"str2:",str2);
    if(str1.length != str2.length){
        return false;
    }
    let str = str1+str1;
    print("str:",str);
    if(str.indexOf(str2) != -1){    
        return true;
    }
    //let str3 = str2.reverse(); //翻轉str2
    //字串翻轉
    var newstr = str2.split("").reverse().join("");
    print("new:",newstr);
    if(str.indexOf(newstr) != -1){    
        //print(str,str2);
        return true;
    }
    return false;
}
var m = parseInt(readline());
for(let i = 0; i < m; i++){
    var n = parseInt(readline());
    let arr = [];
    for (let j = 0; j < n; j++) {
        let line2 = readline();
        //arr.push(line2.split(''));//陣列
        arr.push(line2);//字串
    }
    
    let flag = false;
    find:
    for(let j = 0; j < n; j++){
        for(let k = j+1; k < n; k++){
            if(twins(arr[j], arr[k])){
                flag = true;
                print("true");
                break find;
            }
        }
    }
    if(!flag){
        print(false);
    }
}

c++實現
c++實現2
Python實現

JavaScript字串翻轉

var newstr = str2.split("").reverse().join("");

JavaScript二維陣列輸入

var n = parseInt(readline());
        let arr = [];
        for (let j = 0; j < n; j++) {
            let line2 = readline();
            arr.push(line2.split(''));//陣列
            //arr.push(line2);//字串
    }

JavaScript字串輸入

var n = parseInt(readline());
        let arr = [];
        for (let j = 0; j < n; j++) {
            let line2 = readline();
            //arr.push(line2.split(''));//陣列
            arr.push(line2);//字串
        }

相關文章