您的位置:首页 > 其它

LintCode 循环单词

2017-10-26 21:31 232 查看
The words are same rotate words if rotate the word to the right by loop, and get another. Count how many different rotate word sets in dictionary.

E.g. picture and turepic are same rotate words.

注意事项

所有单词均为小写。

样例

Given dict = [“picture”, “turepic”, “icturep”, “word”, “ordw”, “lint”]

return 3.

“picture”, “turepic”, “icturep” are same ratote words.

“word”, “ordw” are same too.

“lint” is the third word that different from the previous two words.

如何判断两个字符串是s1,s2是相同的:把两个s1相连成新串,判断s2是不是新串的子串。

用了集合来做,试了一下对equals()和hashcode()的重写。

public class Solution {
/*
* @param words: A list of words
* @return: Return how many different rotate words
*/
private String value;
public Solution(){}
public Solution(String s) {
this.value=s;
}
public String toString() {
return this.value;
}
public boolean equals(Object o) {
if(o==this){
return true;
}
if(!(o instanceof Solution)) {
return false;
}
Solution word=(Solution) o;
return judge(this.value,word.value);
}
public int hashCode() {
Solution word= (Solution) this;
List<Character> l=new ArrayList<Character>();
for(char x:value.toCharArray()){
l.add(x);
}
Collections.sort(l);
StringBuilder b=new StringBuilder();
for(char x:l){
b.append(x);
}
return b.toString().hashCode();
}
public boolean judge(String s1,String s2){
return (s1+s1).contains(s2);

9822
}
public int countRotateWords(List<String> words) {
// Write your code here
Set<Solution> s=new HashSet<Solution>();
for(String x:words){
if(!s.contains(x)){
s.add(new Solution(x));
}
}
return s.size();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: