two-strings-are-anagrams&&compare-strings&&longest-words

1、两个字符串是变位词

写出一个函数 anagram(s, t) 去判断两个字符串是否是颠倒字母顺序构成的

样例:
给出 s="abcd",t="dcab",返回 true;

解题思路:这道题首先要明白变位词并不是指的两个单词字母顺序颠倒,指的是构成他们的字母是一样的,但是字母的位置不一样;第一种方法很容易想到通过ASC码构建哈希表,这里需要注意的是如果以‘a‘来当做基点,程序会卡在68%的数据部分,因为我们需要考虑空格的存在,所以第一种方法的程序如下:

 1 public class Solution {
 2     /**
 3      * @param s: The first string
 4      * @param b: The second string
 5      * @return true or false
 6      */
 7     public boolean anagram(String s, String t) {
 8         // write your code here
 9         if( s==null||t==null )  return false;
10         char [] A=s.toCharArray();
11         char [] T=t.toCharArray();
12         int [] nums = new int[200];
13         if( A.length != T.length )  return false;
14         int l = A.length;
15         for(int i=0; i<l ;i++){
16            int index = A[i]-‘ ‘;
17            nums[index]++;
18         }
19         for(int i=0; i<l ;i++){
20            int index = T[i]-‘ ‘;
21            nums[index]--;
22         }
23         for(int i=0;i<200;i++){
24             if(nums[i]>0)  return false;
25         }
26         return true;
27     }
28 };

第二种方法就是C++函数中的sort函数自动对单词中的字母进行排序,排序后相等就是true;通过这两种方法,只想感慨C++在很多时候真的灰常666;

 1 class Solution {
 2 public:
 3     /**
 4      * @param s: The first string
 5      * @param b: The second string
 6      * @return true or false
 7      */
 8     bool anagram(string s, string t) {
 9         // write your code here
10         sort(s.begin(), s.end());
11         sort(t.begin(), t.end());
12
13         return s == t;
14     }
15 };

2、比较字符串

比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母

样例

给出 A = "ABCD" B = "ACD",返回 true

给出 A = "ABCD" B = "AABC", 返回 false

注意

在 A 中出现的 B 字符串里的字符不需要连续或者有序。

解题思路:思路如同上题,不过这次由于题目中限制了所有的字符均为大写字母,并且是包含关系,所以相对而言java的哈希表更加方便;

 1 public class Solution {
 2     /**
 3      * @param A : A string includes Upper Case letters
 4      * @param B : A string includes Upper Case letter
 5      * @return :  if string A contains all of the characters in B return true else return false
 6      */
 7     public boolean compareStrings(String A, String B) {
 8         // write your code here
 9         char [] a = A.toCharArray();
10         char [] b = B.toCharArray();
11         if(a.length<b.length) return false;
12         int[] nums= new int[26];
13         for(int i=0; i< a.length ; i++){
14             int index = a[i]-‘A‘;
15             nums[index]++;
16         }
17         for(int i=0; i< b.length ; i++){
18             int index = b[i]-‘A‘;
19             nums[index]--;
20         }
21         for(int i=0 ;i<26;i++){
22             if(nums[i]<0) return false;
23         }
24         return true;
25     }
26 }

3、最长单词

给一个词典,找出其中所有最长的单词;

在词典

{
  "dog",
  "google",
  "facebook",
  "internationalization",
  "blabla"
}

中, 最长的单词集合为 ["internationalization"]

在词典

{
  "like",
  "love",
  "hate",
  "yes"
}

中,最长的单词集合为 ["like", "love", "hate"]

挑战

遍历两次的办法很容易想到,如果只遍历一次你有没有什么好办法?

解题思路:这道题走了一些弯路,当然遍历两遍的算法不难,并且也比较好写。此处有一个我没有掌握透的知识点是动态数组ArrayList的用法,具体用法见链接http://www.cnblogs.com/rickie/articles/67978.html;

遍历一遍使用动态数组的思路就是假设第一个就是最长的,开始遍历,遇到长度相同的,将这个单词放入数组中,遇到长度更大的则清空当前数组,将新的单词放进去,继续,直到结束。

 1 class Solution {
 2     /**
 3      * @param dictionary: an array of strings
 4      * @return: an arraylist of strings
 5      */
 6     ArrayList<String> longestWords(String[] dictionary) {
 7         // write your code here
 8         int maxlen = dictionary[0].length();
 9         int nums = dictionary.length;
10         ArrayList<String> max = new ArrayList<String>();
11         for(int i=0;i<nums;i++){
12             int l = dictionary[i].length();
13             if(l>maxlen){
14                 max.clear();
15                 max.add(dictionary[i]);
16                 maxlen = l;
17             }else if(l==maxlen){
18                 max.add(dictionary[i]);
19             }else {
20
21             }
22         }
23         return max;
24     }
25 };
时间: 2024-10-16 20:43:55

two-strings-are-anagrams&&compare-strings&&longest-words的相关文章

Two Strings Are Anagrams

Write a method anagram(s,t) to decide if two strings are anagrams or not. Example Given s="abcd", t="dcab", return true. 根据定义可知,两个字符串为anagrams,则每个字符出现的次数相同. 因此有两种解法: 1. 将两个字符串排序,如果排序后两字符串相等则返回true.  2. 统计量字符串的中字符出现的次数是否相等. 1 public cla

[lintcode easy]Compare Strings

Compare Strings Compare two strings A and B, determine whether A contains all of the characters in B. The characters in string A and B are all Upper Case letters. Example For A = "ABCD", B = "ACD", return true. For A = "ABCD"

Lintcode55 Compare Strings solution 题解

[题目描述] Compare two strings A and B, determine whether A contains all of the characters in B.The characters in string A and B are all Upper Case letters. Notice:The characters of B in A are not necessary continuous or ordered. 比较两个字符串A和B,确定A中是否包含B中所有的

Compare Strings

Compare two strings A and B, determine whether A contains all of the characters in B. The characters in string A and B are all Upper Case letters. Notice The characters of B in A are not necessary continuous or ordered. Example For A = "ABCD", B

lintcode 容易题:Compare Strings 比较字符串

题目: 比较字符串 比较两个字符串A和B,确定A中是否包含B中所有的字符.字符串A和B中的字符都是 大写字母 样例 给出 A = "ABCD" B = "ACD",返回 true 给出 A = "ABCD" B = "AABC", 返回 false 注意 在 A 中出现的 B 字符串里的字符不需要连续或者有序. 解题: 用数组,或者用HashMap都可以,由于char String转换成Integer不是很熟悉,搞了好久...

LintCode: Compare Strings

C++ 1 class Solution { 2 public: 3 /** 4 * @param A: A string includes Upper Case letters 5 * @param B: A string includes Upper Case letter 6 * @return: if string A contains all of the characters in B return true 7 * else return false 8 */ 9 bool com

LintCode Two Strings Are Anagrams

1. 把string变为char数组 2. 排序Arrays.sort() public class Solution { /** * @param s: The first string * @param b: The second string * @return true or false */ public boolean anagram(String s, String t) { if(s == null || t == null) return false; if(s.length(

LeetCode.1170-比较字符串中最小字符的出现频率(Compare Strings by Frequency of the Smallest Char)

这是小川的第412次更新,第444篇原创 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第263题(顺位题号是1170).在一个非空字符串s上定义一个函数f(s),该函数计算s中最小字符的出现频率.例如,如果s ="dcce",则f(s)= 2,因为最小字符为"c",其频率为2. 现在,给定字符串数组queries和words,返回一个整数数组answer, 其中每个answer[i]是使得f(queries[i]) < f(W)的单词数量,其

CareerCup chapter 1 Arrays and Strings

1.Implement an algorithm to determine if a string has all unique characters What if you can not use additional data structures? The length of ACSII code of a character is 8, so we can build a array, the length is 260, to represent the hash table of a

don&#39;t run &#39;strings&#39; on untrusted files

0x00 前言:  reahat的官网上可以找到编号CVE-2014-8485的漏洞,描述如下: CVE-2014-8485 binutils: lack of range checking leading to controlled write in _bfd_elf_setup_sections() 然而给的参考链接 MITRE CVE dictionary 和 NIST NVD都没有CVE-2014-8485的信息:Unable to find vuln CVE-2014-8485 可以看