Zheaoli / do-something-right

MIT License
37 stars 3 forks source link

2022-05-17 #240

Open Zheaoli opened 2 years ago

Zheaoli commented 2 years ago

2022-05-17

SaraadKun commented 2 years ago

953. 验证外星语词典

image

class Solution {

    int[] dict = new int[26];
    public boolean isAlienSorted(String[] words, String order) {
        for (int i = 0; i < 26; i++) {
            dict[order.charAt(i) - 'a'] = i;
        }
        for (int i = 1; i < words.length; i++) {
            if (!valid(words[i - 1], words[i])) {
                return false;
            }
        }
        return true;

    }

    private boolean valid(String first, String second) {
        int n1 = first.length(), n2 = second.length();
        for (int i = 0; i < n1 && i < n2; i++) {
            char ch1 = first.charAt(i);
            char ch2 = second.charAt(i);
            if (ch1 == ch2) {
                continue;
            }
            return dict[ch1 - 'a'] <= dict[ch2 - 'a'];
        }
        return n1 <= n2;
    }
}

WeChat:Saraad

dreamhunter2333 commented 2 years ago
package main

/*
 * @lc app=leetcode.cn id=953 lang=golang
 *
 * [953] 验证外星语词典
 */

// @lc code=start
import (
    "fmt"
    "reflect"
    "sort"
)

func Min(x, y int) int {
    if x < y {
        return x
    }
    return y
}

type byAlien struct {
    s        []string
    orderMap map[byte]int
}

func (b byAlien) Len() int {
    return len(b.s)
}
func (b byAlien) Swap(i, j int) {
    b.s[i], b.s[j] = b.s[j], b.s[i]
}

func (b byAlien) Less(i, j int) bool {
    for k := 0; k < Min(len(b.s[i]), len(b.s[j])); k++ {
        first := b.orderMap[b.s[i][k]]
        second := b.orderMap[b.s[j][k]]
        if first != second {
            return first < second
        }
    }
    return len(b.s[i]) < len(b.s[j])
}

func isAlienSorted(words []string, order string) bool {
    orderMap := make(map[byte]int)
    for i := 0; i < len(order); i++ {
        orderMap[order[i]] = i
    }
    newWords := make([]string, len(words))
    copy(newWords, words)
    sort.Sort(byAlien{newWords, orderMap})
    return reflect.DeepEqual(words, newWords)
}

// @lc code=end
func main() {
    fmt.Println(isAlienSorted(
        []string{"apple", "app"}, "abcdefghijklmnopqrstuvwxyz"))
    fmt.Println(isAlienSorted(
        []string{"hello", "leetcode"}, "hlabcdefgijkmnopqrstuvwxyz"))
    fmt.Println(isAlienSorted(
        []string{"word", "world", "row"}, "worldabcefghijkmnpqstuvxyz"))
}

微信id: 而我撑伞 来自 vscode 插件