ARTS挑战第七周

Algorithm

804. 唯一摩尔斯密码词

import java.util.TreeSet;

public class Solution {
    public int uniqueMorseRepresentations(String[] words) {
        String[] code = {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
        TreeSet set = new TreeSet<>();

        for (String word: words) {
            StringBuilder res = new StringBuilder();

            for (int i = 0; i < word.length(); i++) {
                res.append(code[word.charAt(i) - 'a']);
            }
            set.add(res.toString());
        }

        return set.size();
    }
}

Review

Tip

关于搜索

  1. 不要给信息归档,用的时候去搜索就行了
  2. 搜索的关键词加上引号,这样的话引号内的内容是作为一个完整短语出现的
  3. 如在谷歌输入框输入 "Paris hotel"~cheap,这是告诉Google网页中要包含cheap或cheap的同义词。注意~和cheap之间不要有空格
  4. "paris hotels"affordable OR cheap OR budget,OR是一个标准的搜索操作符,意思是搜索结果中至少会包含条件中的一个
  5. "手机" -锤子,搜索除锤子以外的所有手机相关信息。要注意手机和-之间要有空格,-和锤子之间不要有空格
  6. apm site:www.jianshu.com在指定网站搜索相关内容
  7. "年度总结" filetype:ppt搜索包含关键词的制定文件类型的内容
  8. 1人民币 in 美元 度量衡转换

Share

内存对齐:

将数据放在内存上时,对于存放数据的地址有对齐的限制。

对齐是指将数据放在内存上时,必须放置在特定数值的倍数的地址上。例如,“必须放置在4的倍数的地址上”。

最近设计的CPU中有着所有的数据都必须放置在该数据大小的倍数的地址上这样的限制。也就是说2字节的数据必须存放在2的倍数的地址上,4字节的数据必须存放在4的倍数的地址上。违反上述限制就会发生总线错误,导致程序异常终止。

另外,某些OS中调用外部函数时的栈帧必须以16字节为边界排列,例如Windows和Max OS X。

将结构体存放在内存上时,其成员的值由前向后依次排列。另外,结构体中各成员有着和各成员的数据类型的大小一样的对齐限制。即2字节的数据必须存放在2的倍数的地址上,4字节的数据必须存放在4的倍数的地址上。这样一来,像下面这样大小不一的成员在排列时就可能形成间隙,这样的间隙称为填充(padding)。

struct s {
    char a;
    char b;
    int c;
}

0到1字节存放a,1到2字节存放b,4到8字节存放c,2到4字节就形成了间隙。

你可能感兴趣的:(ARTS挑战第七周)