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);
}
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();
}
}