`
淡淡的一抹
  • 浏览: 19069 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Longest Common Prefix

 
阅读更多
题目描述
Write a function to find the longest common prefix string amongst an array of strings.

解题思路
本题要求找出所有字符串的公共前缀。思路是利用set的所有元素的唯一性,首先找到所有的可能子串,然后确定是否为公共子串。

相关知识点
(1)Java中的set遍历
1.迭代遍历:  
Set<String> set = new HashSet<String>();  
Iterator<String> it = set.iterator();  
while (it.hasNext()) {  
  String str = it.next();  
  System.out.println(str);  
}  
  
2.for循环遍历:  
for (String str : set) {  
      System.out.println(str);  
}  

注意:当在遍历过程中需要对set进行删除等改变set结构的时,一定要使用iterator这种方式。具体原因参见:http://fine36.blog.163.com/blog/static/189251005201258113857343/

(2)Java中的set
Set<String> set = new HashSet<String>();


自己的代码
package leetcode;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class LongestCommonPrefix {
	public String longestCommonPrefix(String[] strs) {
		Set<String> set = new HashSet<String>();
		
		//将每个str的所有的可能添加到set中
		for(int times = 0; times < strs.length; times++){
			String str = strs[times];
			String tempStr = "";
			for(int i = 0; i < str.length(); i++){
				tempStr += str.charAt(i);
				set.add(tempStr);
			}
		}//System.out.println(set.toString());
		
		//判断所有str的commonPrefix
		Iterator<String> it = set.iterator();
		while(it.hasNext()){
			String commonPrefix = it.next();
			for(int i = 0; i < strs.length; i++){
				if(!strs[i].startsWith(commonPrefix)) {
					it.remove();
					break;
				}
			}
		}
		
		//返回longestCommonPrefix
		if(set.size() == 0) return "";
		String commonPrefix = "";
		for(String s : set){
			if(s.length() > commonPrefix.length()) commonPrefix = s;
		}
		
        return commonPrefix;
    }
	
	public static void main(String[] args) {
		String[] strs = {
				"abc",
				"abd",
				"akc"
		};
		
		LongestCommonPrefix lcp = new LongestCommonPrefix();
		System.out.println(lcp.longestCommonPrefix(strs));
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics